Deinitialization
Deinitialization은 클래스의 인스턴스가 해제될 때 호출된다. Deinitialization는 Initialization이 init 키워드를 사용하는
것과 마찬가지로 deinit이라는 키워드를 사용한다. 사용 방법도 Initialization과 비슷하지만 Deinitialization은 오직
클래스에서만 사용할 수 있다. 구조체와 열거형에서는 사용할 수 없다.
Swift는 Automatic Reference Counting이라는 기능을 사용하여 인스턴스의 메모리를 관리한다. 따라서 개발자가 코드
안에서 인스턴스 메모리를 관리하는 부분을 작성할 필요가 거의 없다. 그러나 개발자 스스로가 할당한 리소스의 경우라면
아무리 ARC 기능이 뛰어나다고 하더라도 관리할 수가 없다. 대표적으로 파일 오픈이나 네트워크 포트 등이 해당된다.
Deinitialization은 다음의 형식을 갖는다.
deinit {
// perform the deinitialization
}
예
struct Bank {
static var coinsInBank = 10_000
static func vendCoins(var numberOfCoinsToVend: Int) -> Int {
numberOfCoinsToVend = min(numberOfCoinsToVend, coinsInBank)
coinsInBank -= numberOfCoinsToVend
return numberOfCoinsToVend
}
static func receiveCoins(coins: Int) {
coinsInBank += coins
}
}
class Player {
var coinsInPurse: Int
init(coins: Int) {
coinsInPurse = Bank.vendCoins(coins)
}
func winCoins(coins: Int) {
coinsInPurse += Bank.vendCoins(coins)
}
deinit {
Bank.receiveCoins(coinsInPurse)
}
}
var playerOne: Player? = Player(coins: 100)
println("A new player has joined the game with \(playerOne!.coinsInPurse) coins")
// prints "A new player has joined the game with 100 coins"
println("There are now \(Bank.coinsInBank) coins left in the bank")
// prints "There are now 9900 coins left in the bank"
playerOne!.winCoins(2_000)
println("PlayerOne won 2000 coins & now has \(playerOne!.coinsInPurse) coins")
// prints "PlayerOne won 2000 coins & now has 2100 coins"
println("The bank now only has \(Bank.coinsInBank) coins left")
// prints "The bank now only has 7900 coins left"
playerOne = nil
println("PlayerOne has left the game")
// prints "PlayerOne has left the game"
println("The bank now has \(Bank.coinsInBank) coins")
// prints "The bank now has 10000 coins"
'Smart Device > Swift' 카테고리의 다른 글
Swift extension #2 Initializers의 확장 (0) | 2015.06.25 |
---|---|
Swift extension #1 기존 자료형의 확장 (0) | 2015.06.25 |
Swift Initializer Delegation for Value Types (0) | 2015.06.24 |
Swift Initialization 상수 속성의 변경 (0) | 2015.06.23 |
Swift Playground에서 console output 보여주기 (0) | 2015.06.23 |