![](/img/trans.png)
[英]How can I use didSet to change the text of a UITextField (IBOutlet)?
[英]Can I use didSet in deinit?
我在我的類中添加了一個Timer變量,並使用其didSet觀察器使舊值無效
var timer: Timer? {
didSet { oldValue?.invalidate() }
}
deinit {
timer = nil
}
我認為這樣就足以在類被取消初始化時使計時器無效,但看起來似乎沒有調用didSet。 這是為什么? 觀察員在去初始化期間不工作嗎?
我們在這里給出答案,以便我們可以關閉它。
看來物業觀察員顯然不會在deinit
期間deinit
。 這似乎與屬性觀察者在init
期間不運行這一事實相似,但與后者不同,前者似乎沒有在任何地方清楚地記錄。
你可以通過語義技巧解決這個問題,但不要! 這似乎是一個錯誤(我已經提交了)。
最初的用例並不是一個非常好的用例。 在替換中隱藏計時器的失效聽起來像是潛在的維護噩夢。 同意失效和替換像火腿和雞蛋一樣,我一直在做的是編寫一種方法,按照這個順序使一切無效並替換,並通過該方法匯集所有內容。 (如果需要,可以強制執行,但我不deinit
。)可以在deinit
期間調用該方法。
補充說明 :在使用計時器時,請注意內存管理問題! 您可以輕松地讓自己進入一個從未調用過 deinit
的情況,因為您保留了計時器,但計時器正在保留您。 然后,您將無法使計時器無效,並且您的整個視圖控制器將泄漏。 你不會在你的問題中抱怨這一點,但這是一個相關的問題,所以我認為我會更好地標記它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.