iOS6 viewDidUnload已弃用

也许这是一个不好的做法,但从我阅读的文档中,我得到了在viewDidLoad方法内部初始化对象的建议,并在viewDidUnload中将其命名为零。

例如,如果你有像添加一个观察者的东西

[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(filterready:)
                                                 name:@"filterReady"
                                               object:nil];

现在我没有方法去除观察者,但是每次显示视图时都会调用viewDidLoad,导致多个观察者在一段时间后运行,然后多次调用选择器。

我可以通过将一些清洁剂移动到viewDidDisappear方法来解决这个问题,但是现在我有些怀疑我是否做了正确的事情。

在我的示例中,我有多个导航控制器控制着他们的子导航,但是dealloc从来没有被调用过,即使它们没有被引用


你应该使用- (void)didReceiveMemoryWarning- (void)dealloc方法。

在iOS 6中,UIViewController的viewWillUnload和viewDidUnload方法现在已被弃用。 如果您正在使用这些方法来释放数据,请改用didReceiveMemoryWarning方法。 如果未使用视图控制器视图,也可以使用此方法释放对视图控制器视图的引用。 在执行此操作之前,您需要测试视图不在窗口中。

所以你应该先检查你的视图是否在窗口中,然后在didReceiveMemoryWarning删除你的观察者


首先,即使viewDidUnload未被弃用,您也必须在viewDidUnloaddealloc取消注册该通知。 即使在iOS 6之前,在大多数情况下都不会调用viewDidUnload ; 只在低内存的情况下。 因此,如果您只将它放在viewDidUnload而不是之前的dealloc ,它将不会被注销,并且在它被释放并收到通知时它可能会崩溃。 所以你必须在之前把它放在dealloc ,因为它能够正常工作。

其次,如果你之前做的是正确的,那么你不需要做任何额外的工作就可以在iOS 6中正常工作。iOS 6唯一的区别是视图不再被卸载(即使在内存不足的情况下)。 所以当你没有遇到内存不足的情况时,它与iOS 5中的一样。 由于视图没有被卸载,所以viewDidLoad只会被调用一次,所以你的通知只会被注册一次。 它将在dealloc中未注册,因为您必须已将它放在正确的位置。


Alex答案很好。 但我喜欢适当的配对。 出于这个原因,除非视图在甚至没有看到时需要通知,否则我通常在viewWillAppear和viewDidDisappear上添加通知

链接地址: http://www.djcxy.com/p/66319.html

上一篇: iOS6 viewDidUnload Deprecated

下一篇: Zbar SDK is not working in iOS6