我在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];
}
答案 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中添加观察者观察者