iT邦幫忙

2022 iThome 鐵人賽

DAY 23
0
自我挑戰組

初入Swift新手村的旅程系列 第 23

Day23 Swift 反初始化

  • 分享至 

  • xImage
  •  

反初始化

反初始化只適用於class,當一個類實例被釋放之前,反初始化器將被調用。關鍵字用deinit像是初始化用init一樣。

  • 您不要將 func 與反初始化器一起使用。
  • 反初始化器永遠不能接受參數或返回數據。
  • 當類實例的最後一個副本被銷毀時,反初始化器運行。
  • 從不直接調用反初始化器。
  • 結構沒有反初始化器。
    當實例不在需要時,Swift將會釋放,利用ARC來處理內存管理。
    每個class中只能有一個反初始化器存在
class Temp {
    deinit{
        print("Temp deinit")
    }
}
var temp:Temp? = Temp()
// 當可需類型的類實例變數為nil,實例將被釋放
temp = nil

反初始化應用

class User{
    let id: Int
    
    init(id: Int) {
        self.id = id
        print("User \(id) : I'm alive")
    }
    deinit{
        print("User \(id) : I'm dead")
    }
}

var users = [User]()

for i in 1...3 {
    let user = User(id: i)
    print("User \(user.id) : I'm in control")
}

print("Loop is finish")
users.removeAll()
print("Array is clear")

    
// 印出以下
//User 1 : I'm alive
//User 1 : I'm in control
//User 1 : I'm dead
//User 2 : I'm alive
//User 2 : I'm in control
//User 2 : I'm dead
//User 3 : I'm alive
//User 3 : I'm in control
//User 3 : I'm dead
//Loop is finish
//Array is clear

接下來,是錯誤處理的介紹


上一篇
Day22 Swift 初始化
下一篇
Day24 Swift 錯誤處理
系列文
初入Swift新手村的旅程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言