[英]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.