2012-11-04 52 views
0

不知道我在問這個問題,但無論如何我都會試一試。在對象釋放期間取消註冊對象的觀察者

我有一個程序,它調用的代碼,這一點......

[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方法具有正確的操作對象。給我正確的做,這是有道理的,還是我完全沒有?

回答

4

我不認爲敲定是正確的地方。

取消註冊觀察的最佳位置在您的dealloc方法中,該方法在對象被刪除之前被調用。

+0

+1'-finalize'是a)僅由垃圾收集器調用,b)由於您在此時應該使用ARC而不是垃圾收集,因此不推薦使用。 – Caleb

+0

好的....所以我應該簡單地重做dealloc方法。我會在本週嘗試一下,然後在完成工作後按下投票按鈕。 –