我最近将我的iOS项目转换为ARC。我的项目中有两个目标。一个是应用程序本身,另一个是GHUnit测试集。我有大约200个测试,在创建和修改Core Data对象方面做了大量工作。测试使用的核心数据存储是内存存储,一旦测试完成就会被丢弃(即它不会在任何地方持久存在)。
当我的测试运行一段时间(它们在抛出错误之前从未达到完全相同的点,但它总是在相同的测试中)应用程序崩溃时出现EXC_BAD_ACCESS(Code = 2,address = ... )
控制台中的输出如下:
我已按照here in this answer的说明操作,并将GHUnit目标的main.m文件设置为使用-fno-objc-arc
编译器标志,但这似乎没有帮助。
我真的不明白这些错误是什么意思,搜索它们似乎没有帮助。我唯一的猜测是我的内存耗尽,但我不知道为什么或如何,考虑到ARC应该为我发布对象。
我真的很感激任何人都可以帮我解决这个问题!如果您有任何问题,请给我留言,我会尽快回复您!
谢谢!
答案 0 :(得分:1)
克里斯,
首先,由于存在内存耗尽问题,您应该查看在Instruments分配工具下运行的测试。请记住打开VM自动快照。然后,您应该在测试执行时多次标记堆。
其次,虽然这可能与ARC有关,但很可能并非如此。通常,ARC应用程序因为可以更快地自动释放对象,所以占用的空间比MRR应用程序小。迁移到具有不同选项的新编译器可能只是发现预先存在的问题。
第三,因为您使用的是内存数据库,我的第一个测试就是将其更改为SQLite数据库。它的占地面积要小得多。 (虽然您可能会选择稍后返回内存中的数据库,但我们正在尝试查找内存耗尽的原因。内存中的数据库可能会占用大量内存。因此,我们可以使用它。 / p>
完成上述第一和第三项任务后,请报告结果。
安德鲁