1

在 iOS5 之前,大多数人都是在 dealloc 中完成的。通过 iOS5,该功能迁移到 viewDidUnload。现在 viewDidUnload 已被弃用并且永远不会被调用,看来我们将不得不找到新的位置来取消注册我们的观察者。

问题是,在哪里?

4

1 回答 1

4

从 Apple 文档中,视图不再被卸载。

在 iOS 6 之前,当发生内存不足警告时,如果 UIViewController 类知道以后可以重新加载或重新创建它们,它会清除其视图。如果发生这种情况,它还会调用 viewWillUnload 和 viewDidUnload 方法,让您的代码有机会放弃与视图层次结构关联的任何对象的所有权,包括从 nib 文件加载的对象、在 viewDidLoad 方法中创建的对象以及创建的对象在运行时懒惰地添加到视图层次结构中。在 iOS 6 上,视图永远不会被清除,并且这些方法永远不会被调用。如果您的视图控制器需要在内存不足时执行特定任务,它应该覆盖 didReceiveMemoryWarning 方法。

因此,您将取消注册命令放入-(void)deallocor -(void)didReceiveMemoryWarning。即使在 Arc -(void)deallocget's call 中,您也无法调用[super dealloc].

于 2012-10-05T16:29:15.857 回答