我有一个问题,我找不到清楚,也许你可以帮助我...
我有一个基于UINavigationController的iPad项目,里面的大多数(但不是全部)控制器是UITableViewController的实例,一切运行良好......
除了我的应用程序随机崩溃,有时在使用10分钟后,有时仅在10秒钟后崩溃... 它永远不会在相同的视图上崩溃,永远不会同时崩溃,使其难以重现。
此外,它只在设备上发生接缝,我从未在模拟器中发生此类故障。
调试器对我没什么帮助,这就是它所说的: - [UITableView autorelease]:发送到解除分配的实例0x8e9800的消息
这是调用堆栈: http://i.stack.imgur.com/JSCHx.png
有什么想法吗? 谢谢(对不起我的英文)
答案 0 :(得分:1)
你在代码中的某个地方过度释放UITableView。您是否在其中一个UITableViewControllers上的UITableView上调用了release
或autorelease
?您应该只释放您拥有的对象。您可以使用以alloc
,new
,copy
或retain
开头的方法来拥有对象。
请阅读可可内存管理指南以获取更多信息。
有用的链接:
答案 1 :(得分:0)
在某些时候,你要么发布一个你不拥有的UITableView实例,要么在你保留对它的引用的某个时刻你没有retain
一个(例如你将它存储在一个ivar或一个属性中)声明分配而不是保留)。
答案 2 :(得分:0)
我已经写过如何在我的博客上调试这样的事情:
http://loufranco.com/blog/files/Understanding-EXC_BAD_ACCESS.html
基本上,首先尝试这三件事:
答案 3 :(得分:0)
我道歉,在重新阅读了我的所有源代码之后,我发现了一个ViewController(我有大约20个ViewController),我在ViewDidUnload中发布了一个Outlet。
它随机崩溃的原因是我不太了解ViewDidUnload的机制,当内存不足并且视图不可见时,调用它来释放视图(但不是控制器的对象)(例如:First ViewController of一个NavigationController),当ViewController再次可见时重新加载视图...
在模拟器中,内存很少成为问题因此几乎从不调用ViewDidUnload ......
问题已解决,谢谢大家的帮助
答案 4 :(得分:0)