簡體   English   中英

NSNotificationCenter觀察者沒有被刪除?

[英]NSNotificationCenter observer is not getting removed?

我在viewDidLoad方法中添加了NSNotificationCenter ,並在viewDidUnload中將其刪除了,但是並沒有將其刪除。 我正在關注ARC。 我沒有回答,但我沒有走運。 我沒有發表評論的聲譽,因此發布一些內容似乎很重復。 請不要投票。

樣例代碼:

- (void)viewDidLoad
{     
    [[NSNotificationCenter defaultCenter ] addObserver:self.containerView
                                              selector:@selector(loadInitialScreen)
                                                  name:CLEARSCREEN_DEPOSIT  
                                                object:NULL];
}

- (void)viewDidUnload
{
    [[NSNotificationCenter defaultCenter] removeObserver:self.containerView
                                                    name:CLEARSCREEN_DEPOSIT 
                                                  object:nil];

}

您應該根據需要在-viewWillDisappear: ,- -viewDidDisappear:-dealloc方法中刪除觀察者。 究其原因, -viewDidUnload在iOS6的+永遠不會再調用,iOS6的之前接收到內存不足的警告時,它被稱為。

嘗試使用viewDidDisappear代替viewDidUnload

-(void)viewDidDisappear:(BOOL)animated
{
    [[NSNotificationCenter defaultCenter] removeObserver:self.containerView
                                                    name:CLEARSCREEN_DEPOSIT object:nil];
    [super viewDidDisappear:animated];
}

當收到應用程序/視圖控制器的內存警告時,將調用viewDidUnload(對於<iOS 6.0)。 不會刪除視圖,因為調用了dealloc。 但是當您使用ARC時,無法實現dealloc方法。

最好的選擇是在方法loadInitialScreen刪除觀察者,如果它只需要被調用一次的話。

如果您的通知可以多次發布,則最好在viewDidDisappear中刪除觀察者,然后在ViewWillAppear中添加通知的觀察者

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM