我有以下代碼:
class Problem{
init(){
print("Problem init");
}
deinit{
print("Problem deinit");
}
}
var list = Problem();
輸出:
問題初始化
以下導致程式呼叫deinit:
class Problem{
init(){
print("Problem init");
}
deinit{
print("Problem deinit");
}
}
do {
var list = Problem();
}
問題:
- 為什么不是
deinit第一次呼叫? - 有沒有辦法保證在我無法控制它是如何撰寫的(即用戶代碼)的代碼中
deinit總是被呼叫Problem?
PS我知道,作為一名 Swift 新手,我很可能忽略了一個明顯的原因。
uj5u.com熱心網友回復:
這是因為您通過添加do-block.
在第一個場景中,當運行該代碼時,Problem在全域范圍(在 Swift 中的類或結構定義之外)創建(初始化)一個實體,然后它就坐在那里。程式不會結束,也不會被取消初始化。
在第二種情況下,您Problem在 a 內部創建實體do-block,因此它的范圍僅限于該塊內部。當do-block結束時,實體被取消參考,從而取消初始化。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/384050.html
