0

我的代码片段:

- (void)viewDidUnload{
    [super viewDidUnload];
    self.statusView = nil;
    self.tableView = nil;
    self.noDataView = nil;
}

在极少数情况下,我的应用程序崩溃了self.noDataView = nil;。当我调试时po self,似乎它指向的不是当前控制器。可能的原因是什么?

PS:self.tableView's delegateanddataSource设置为selfininit方法。这和这个有关系吗?

4

2 回答 2

1

首先,[super viewDidUnload]应该作为最后一个语句。但是,这可能无法解决您的错误。

你的问题的原因很简单。您的控制器在某处过度释放。您是否启用了僵尸检测?应用程序崩溃的代码通常是无关紧要的,因为问题发生得更早。

于 2013-09-11T09:13:46.787 回答
0

viewWillUnload现在已弃用,您不能再指望它了,任何关于它的问题都会引导您参考以下参考资料。

来自苹果:

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

并引用 WWDC 2012:

方法 viewWillUnload 和 viewDidUnload。我们不会再打电话给他们了。我的意思是,我们经历了一种成本效益方程和分析。在早期,我们确实需要确保在内存警告时卸载视图。有各种各样的图形和后备商店等等也会被卸载。我们现在独立于视图卸载那些,所以卸载那些对我们来说没什么大不了的,而且有很多错误可以指向。

编辑:对于您在 iOS 5.1 中的问题,viewDidUnload用于释放您在创建视图时所做的任何事情,因此除非您在其中创建或保留对象,viewDidLoad否则nib您可能不会在viewDidUnload.

于 2013-09-11T04:28:14.773 回答