【发布时间】:2012-05-17 07:09:31
【问题描述】:
我曾经在viewDidLoad: 中使用addObserver,在dealloc: 中使用removeObserver。代码:
- (void)viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(refreshData)
name:AnyNotification
object:nil];
}
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self
name:AnyNotification
object:nil];
}
但是根据一些文章所说,最好在viewDidAppear: 中addObserver 和removeObserver 在viewDidDisappear: 中。代码:
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(refreshData)
name:AnyNotification
object:nil];
}
- (void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
[[NSNotificationCenter defaultCenter] removeObserver:self
name:AnyNotification
object:nil];
}
那么,添加Observer/removeObserver 的更好方法是什么?
【问题讨论】:
-
在
dealloc中删除观察者是不好的,以防可能发生内存警告。 -
视图确实消失了,只要确保删除每个特定通知的观察者,而不是 removeObserver:self,否则当视图重新出现时,您会删除超类通知观察者。
标签: iphone objective-c cocoa-touch