- ์ด๊ธฐํ ํด์ ๊ตฌ๋ฌธ
- ํด๋์ค ์ธ์คํด์ค๊ฐ ํ ๋น ํด์ ๋๊ธฐ ์ง์ ์ ํธ์ถ๋๋ค.
deinit
ํค์๋๋ก ์์ฑ.
- ํด๋์ค ํ์
์์๋ง ๊ฐ๋ฅ!!
Deinit ์ ์๋
- Swift ๋ ์๋ ์ฐธ์กฐ ์นด์ดํ
(ARC) ๋ฅผ ํตํด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๋ค.
- ๋ ์ด์ ํ์ํ์ง ์์์ง(์ฐธ์กฐ ์นด์ดํธ๊ฐ 0์ธ) ์ธ์คํด์ค๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ํ๋ ๊ฒ.
- ์๋์ผ๋ก ๋๊ธฐ ๋๋ฌธ์, C์ฒ๋ผ
free(in_degree)
์ด๋ ๊ฒ ํ ํ์๊ฐ ์์ง๋ง,
- ํ์ง๋ง ์์ฒด ์์์ผ๋ก ์์
ํ๋ ๊ฒฝ์ฐ, ์ง์ ์ํํด์ค์ผํ ๋๊ฐ ์๋ค. (๋ช
์์ ์ผ๋ก ํ๊ธฐ ์ํด์ ์ฌ์ฉํ๊ธฐ๋ ํจ)
deinit {
var_a = nil
}
- ์ธ์คํด์ค ํ ๋น ํด์ ์ง์ ์ ์๋์ผ๋ก ํธ์ถ๋๊ณ , ์ง์ ํธ์ถํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ๋ค.
- ์์ ํด๋์ค์ deinit ์ ํ์ ํด๋์ค๋ก ์์๋๋ค.
- ํ์ ํด๋์ค์ deinit ํธ์ถ์ด ๋๋ ๋, ์๋์ผ๋ก ์์ ํด๋์ค์ deinit ์ ํธ์ถํ๋ค.
- ์์ ํด๋์ค์ deinit ์ ํ์ ํด๋์ค์ deinit ๊ตฌํ์ด ์์ด๋ ํญ์ ํธ์ถ๋๋ค.
Deinit ์๋ ์์
class Bank {
static var coinsInBank = 10_000
static func distribute(coins numberOfCoinsRequested: Int) -> Int {
let numberOfCoinsToVend = min(numberOfCoinsRequested, coinsInBank)
coinsInBank -= numberOfCoinsToVend
return numberOfCoinsToVend
}
static func receive(coins: Int) {
coinsInBank += coins
}
}
class Player {
var coinsInPurse: Int
init(coins: Int) {
coinsInPurse = Bank.distribute(coins: coins)
}
func win(coins: Int) {
coinsInPurse += Bank.distribute(coins: coins)
}
deinit {
Bank.receive(coins: coinsInPurse)
}
}
var playerOne: Player? = Player(coins: 100)
playerOne!.win(coins: 2_000)
playerOne = nil