iOS UITableView随机崩溃

时间:2011-03-08 16:55:19

标签: iphone cocoa-touch ipad ios uitableview

我有一个问题,我找不到清楚,也许你可以帮助我...

我有一个基于UINavigationController的iPad项目,里面的大多数(但不是全部)控制器是UITableViewController的实例,一切运行良好......

除了我的应用程序随机崩溃,有时在使用10分钟后,有时仅在10秒钟后崩溃... 它永远不会在相同的视图上崩溃,永远不会同时崩溃,使其难以重现。

此外,它只在设备上发生接缝,我从未在模拟器中发生此类故障。

调试器对我没什么帮助,这就是它所说的: - [UITableView autorelease]:发送到解除分配的实例0x8e9800的消息

这是调用堆栈: http://i.stack.imgur.com/JSCHx.png

有什么想法吗? 谢谢(对不起我的英文)

5 个答案:

答案 0 :(得分:1)

你在代码中的某个地方过度释放UITableView。您是否在其中一个UITableViewControllers上的UITableView上调用了releaseautorelease?您应该只释放您拥有的对象。您可以使用以allocnewcopyretain开头的方法来拥有对象。

请阅读可可内存管理指南以获取更多信息。

有用的链接:

http://www.cocoadev.com/index.pl?MemoryManagement

http://www.cocoadev.com/index.pl?RulesOfThumb

答案 1 :(得分:0)

在某些时候,你要么发布一个你不拥有的UITableView实例,要么在你保留对它的引用的某个时刻你没有retain一个(例如你将它存储在一个ivar或一个属性中)声明分配而不是保留)。

答案 2 :(得分:0)

我已经写过如何在我的博客上调试这样的事情:

http://loufranco.com/blog/files/Understanding-EXC_BAD_ACCESS.html

基本上,首先尝试这三件事:

  1. 进行分析并修复您看到的所有内容
  2. 打开Zombies,运行你的代码 - 它会告诉你是否与被解除分配的对象交谈
  3. 如果失败,请尝试使用Debug Malloc,但这样做会更难。

答案 3 :(得分:0)

我道歉,在重新阅读了我的所有源代码之后,我发现了一个ViewController(我有大约20个ViewController),我在ViewDidUnload中发布了一个Outlet。

它随机崩溃的原因是我不太了解ViewDidUnload的机制,当内存不足并且视图不可见时,调用它来释放视图(但不是控制器的对象)(例如:First ViewController of一个NavigationController),当ViewController再次可见时重新加载视图...

在模拟器中,内存很少成为问题因此几乎从不调用ViewDidUnload ......

问题已解决,谢谢大家的帮助

答案 4 :(得分:0)