【问题标题】:Am I supposed to remove KVO from UIView in -[UIViewController viewWillUnload] AND -[UIViewControoler dealloc]?我是否应该在 -[UIViewController viewWillUnload] 和 -[UIViewControoler dealloc] 中从 UIView 中删除 KVO?
【发布时间】:2012-09-29 18:16:58
【问题描述】:

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

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

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

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

【问题讨论】:

标签: objective-c uiviewcontroller


【解决方案1】:

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

【讨论】:

  • 我不能只在-[UIViewController dealloc] 中执行此操作,因为我添加观察者的UITableView 将在-[UIViewController didReceiveMemoryWarning] 上销毁:它调用-[UIViewController viewWillUnload] 但不调用-[UIViewController dealloc]。最后一个不叫-[UIViewController viewWillUnload]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-05
  • 1970-01-01
  • 2010-12-18
  • 2013-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多