我应该从UIView中移除KVO - [UIViewController viewWillUnload] AND - [UIViewControoler dealloc]?

时间:2012-10-09 12:05:45

标签: objective-c uiviewcontroller

我将观察者添加到UITableView属性。

[tableView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew context:nil];

众所周知,当UIViewController被弹出时,-[UIViewController dealloc]方法会被调用,而-[UIViewController viewWillUnload]会收到内存警告。

我应该在两个地方删除观察者(好吧,无论如何我必须)?这是最好的代码重复。或者我可以在-[UIViewController viewWillUnload]中调用-[UIViewController dealloc](如Three20框架中所述)?这种做法好吗?

1 个答案:

答案 0 :(得分:1)

你应该只删除dealloc中的观察者。如果你也在viewWillUnload中执行它,你可能会删除观察者两次,这会使你的应用程序崩溃。但是,添加观察者两次不是问题。即使你在viewDidUnload中没有tableView,观察者也可以继续存在,它只是不会做任何事情。