我目前正在开发一个严重依赖 Core Data 的应用程序。我 使用导航 Controller 来插入和弹出 View 。我去的时候 程序有时回到导航 Controller 的堆栈中 崩溃,我收到错误(通常突出显示在 managedObjectContext 合成或释放):
"Thread 1: Program received signal: "EXC_BAD_ACCESS".
我使用静态分析器修复了它发现的所有漏洞。
我使用了 NSZombie,当我关闭菜单 View 时,我的分配似乎增加了,然后没有减少。然后,当我点击另一个菜单 View 时,我会得到两个结果。
0 Category:NSManagedObjectContext EventType:Malloc RefCt:1 Timestamp:00:04.133.722 Address:0x5da0f10 Size:128 RespLib:pua-app RespCaller:-[pua_appAppDelegate managedObjectContext]
1 Category:NSManagedObjectContext EventType:Zombie RefCt:-1 Timestamp:00:16.524.983 Address:0x5da0f10 Size:0 RespLib:pua-app RespCaller:-[OpenersroutinesMenuViewController setManagedObjectContext]
我对此类调试的经验为零,但显然托管对象上下文“不愉快”,我的猜测是我没有正确创建或管理通过菜单传递的上下文。这也很有趣,因为 MOC 在这些菜单中没有被更改,并且在修改它的 View 中不会发生此错误。
最佳答案
首先,泄漏永远不会导致这种崩溃。泄漏是释放不足。这些崩溃通常是由过度释放引起的。
从您的 NSZombie
输出来看,您的 MOC 似乎被过度发布了。我会查看您处理 managedObjectContext 的每个地方,并确保您正确地保留和释放它。第一条规则是使用访问器,而不是直接弄乱你的 ivar(-init
、-dealloc
和你的访问器除外,它们应该使用 ivar)。
此类问题的一个可能原因是多线程。确保您没有从多个线程访问同一个 MOC。它们不是线程安全的。
该问题可能与 View 或菜单无关。问题很可能是您在未保留的 MOC 上调用 -release
。
关于iphone - 核心数据应用程序崩溃, "EXC_BAD_ACCESS"& NSZombie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6066510/