Objective-C消息被发送到地址为0x75d52a0的解除分配对象(僵尸)

时间:2012-12-06 07:54:08

标签: objective-c ios xcode dealloc nszombie

我对iOS开发相对较新,所以感谢您帮助找出我遇到的错误的根本原因。

我尝试使用Instruments(即Allocations-Zombie Profiler)调试错误,但我无法理解所呈现的调用堆栈。

这是用户界面链接的方式: TabBarController - > NavigationController - > TopPlacesTableViewController - > RecentPhotosTableViewController - > PhotoViewController

单击最后一个视图中的“后退”按钮(即PhotoViewController的后退按钮)时发生错误。此操作应该显示以前的RecentPhotosTableViewController,但是在viewWillAppear和ViewDidAppear的事件之间有时会访问未知的解除分配的对象。

此外,我有一个GenericTableViewController,它是TopPlacesTableViewController和RecentPhotosTableViewController的父级。子项在父项中设置NSMutableArray属性,该属性是在子项视图中加载的数据。

我目前正在使用iOS6和XCode4.5。

[更新:在控制台中,显示了这一行 - “[UIView _forgetDependentConstraint:]:发送到解除分配的实例xxx的消息”]。

2 个答案:

答案 0 :(得分:0)

我觉得你没有使用ARC,而且你没有保留传递你以前的对象。在此期间,前一个对象被释放,然后您访问它。

您可以重构代码以使用ARC或保留或自动释放。

答案 1 :(得分:-1)

转到产品>编辑方案>诊断点击然后检查启用Zombie对象

制定一个断点,然后一步一步地知道哪个对象被解除分配,也许已经删除了指向你对象的指针,然后操作系统已经解除了你的对象。