NSNotificationCenter观察员没有被删除?

时间:2013-02-27 07:19:59

标签: ios cocoa-touch nsnotificationcenter

我在NSNotificationCenter方法中添加了viewDidLoad,并在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];

}

3 个答案:

答案 0 :(得分:4)

您应该在-viewWillDisappear:-viewDidDisappear:-dealloc方法中删除观察者,具体取决于您的需要。原因是iOS6 +中的-viewDidUnload从未被调用过,在收到内存警告时,它会在iOS6之前被调用。

答案 1 :(得分:1)

尝试使用viewDidDisappear代替viewDidUnload

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

答案 2 :(得分:0)

当向应用程序/视图控制器收到内存警告时,将调用

viewDidUnload(对于< iOS 6.0)。 不会调用它来删除视图,因为调用了dealloc。但是当您使用ARC时,无法实现dealloc方法。

最好的办法是删除方法loadInitialScreen中的观察者,如果必须只调用一次。

如果您的通知可以多次发布,最好在viewDidDisappear中删除观察者,但在ViewWillAppear中添加观察者观察者