-[CFString版本]:消息发送到已释放实例— Core Data iOS
实现是直接的。 我有一个实体“ MyApp”,有一个属性“ newName”。 在viewWillAppear中,我只是创建实体,为属性分配值,进行保存,最后进行访存。
在保存之前一切都很好。 但是,当我打印获取的结果时,事情发生了。 崩溃…。
这就是我所得到的。 没有控制台日志,没有警告,没有谋杀武器。
最初的线索是EXC_BAD_ACCESS和EXC_1386,表明它的存在,是的,ZOMBIE。 僵尸是保留计数为0的对象仍然继续存在。 要确认它在产品->编辑方案->诊断中启用了僵尸,请为Zombie对象启用复选标记。
再次运行该应用程序,我得到了日志。 由于字符串僵尸对象而导致崩溃的原因。
是时候找到僵尸了。
为了更深入地研究,我们需要侦探“ xcode工具”的帮助。 打开xcode->开发人员工具->工具-> 选择僵尸
在方案中选择所需的模拟器和应用,然后点击红色的录制按钮。
景气,我们弹出这个僵尸,
查看分配历史记录,我发现在获取之后,访问属性“ newName”会导致该属性的内存释放,
但为什么 ? 动机是什么?
过渡到ARC发行说明
描述如何将代码从手动保留/发行转换为使用ARC。
developer.apple.com
ARC对方法命名施加了约束:
- 您不能给访问器一个以
new
开头的名称。
解决案例后,将核心数据实体的属性从“ newName”重命名为“ updatedName”,解决了崩溃问题。
希望这对您有帮助。 任何帮助都可以通过pratheesh_db@hotmail.com与我联系。