我的代码段:
- (void)viewDidUnload{
[super viewDidUnload];
self.statusView = nil;
self.tableView = nil;
self.noDataView = nil;
}
在极少数情况下,我的应用程序在self.noDataView = nil;
行崩溃了。当我通过po self
调试时,它似乎指向了除当前控制器之外的其他东西。可能的原因是什么?
PS:self.tableView
的{{1}}和delegate
在dataSource
方法中设置为self
。这与此有什么关系吗?
答案 0 :(得分:1)
首先,[super viewDidUnload]
应该用作最后一个语句。但是,这可能无法解决您的错误。
问题的原因很简单。你的控制器在某个地方被过度释放。你有僵尸检测功能吗?应用程序崩溃的代码通常无关紧要,因为问题发生得更早。
答案 1 :(得分:0)
viewWillUnload
现已弃用,你不能指望它,任何有关它的问题都会引导你进入下面的参考文献。
来自Apple:
在iOS 6中,viewWillUnload和viewDidUnload方法 UIViewController现已弃用。如果您使用这些方法 要发布数据,请改用didReceiveMemoryWarning方法。您 也可以使用此方法释放对视图的引用 控制器的视图是否未被使用。你需要测试一下 在执行此操作之前,视图不在窗口中。
引用WWDC 2012:
方法viewWillUnload和viewDidUnload。我们不会打电话 他们了。我的意思是,有一种成本效益方程式 我们经历过的分析。在早期,有一个真实的 性能需要我们确保在内存警告中我们卸载 观点。有各种图形和后备存储等等 那也会卸载。我们现在卸载那些独立的 看来,对于那些被卸载的人来说,这对我们来说并不是什么大不了的事, 并且有很多错误会有指针进入。
修改强>:
对于iOS 5.1中的问题,viewDidUnload
用于释放创建视图时所做的任何操作,因此,除非您在viewDidLoad
或nib
中创建或保留对象,否则可能不会在viewDidUnload
中发布它们。