不知道我在問這個問題,但無論如何我都會試一試。在對象釋放期間取消註冊對象的觀察者
我有一個程序,它調用的代碼,這一點......
[localCalculateTimeFiles addObserver:self
forKeyPath:@"arraystatuscounter"
options:NSKeyValueObservingOptionNew
context:NULL];
最終localCalculateTimeFiles消失,我想removeObserver當前代碼位(說句不好聽)。如果我什麼都不做,並且localCalculateTimesFiles消失而沒有執行正確的removeObserver,則運行時將引發異常。我認爲這種方式過去常常是一種警告,但現在該方案暫停。
比方說,我在正確的時間將所有的對象指針都放在正確的位置。我想要做的是讓localCalculateTimeFiles在下路(可以這麼說)的時候移除觀察者,當它被釋放時。
看來,根據蘋果的文檔,我可以添加一個方法來localCalculateTimeFiles看起來像這樣做的工作......
- (void)finalize {
if (log_file != NULL) {
fclose(log_file);
log_file = NULL;
}
[super finalize];
}
我更換邏輯來處理LOG_FILE新將取消註冊觀察者的邏輯。很明顯,我必須確保我的所有指針都是正確的,以確保removeObserver方法具有正確的操作對象。給我正確的做,這是有道理的,還是我完全沒有?
+1'-finalize'是a)僅由垃圾收集器調用,b)由於您在此時應該使用ARC而不是垃圾收集,因此不推薦使用。 – Caleb
好的....所以我應該簡單地重做dealloc方法。我會在本週嘗試一下,然後在完成工作後按下投票按鈕。 –