2

我最近将我的 iOS 项目转换为 ARC。我的项目中有两个目标。一个是应用程序本身,另一个是一组 GHUnit 测试。我有大约 200 个测试,它们在创建和修改 Core Data 对象方面做了很多工作。测试使用的核心数据存储是内存存储,一旦测试完成就会被丢弃(即它不会在任何地方持久化)。

当我的测试已经运行了一段时间(在抛出错误之前它们永远不会到达完全相同的点,但它总是围绕相同的测试)应用程序崩溃并出现 EXC_BAD_ACCESS(代码=2,地址=...)

控制台中的输出如下: 控制台输出

我已按照此答案中的说明进行操作,并将我的 GHUnit 目标的 main.m 文件设置为使用-fno-objc-arc编译器标志,但这似乎没有帮助。

我真的不明白这些错误是什么意思,搜索它们似乎没有帮助。我唯一的猜测是我的内存不足,但我不确定为什么或如何,考虑到 ARC 应该为我释放对象。

我真的很感谢任何人可以给我解决这个问题的任何帮助!如果您有任何问题,请给我留言,我会尽快回复您!

谢谢!

4

1 回答 1

1

克里斯,

首先,由于您有内存耗尽问题,您应该查看在 Instruments 分配工具下运行的测试。记得开启虚拟机自动快照。然后你应该在测试执行时多次标记堆。

其次,虽然这可能与 ARC 有关,但很可能不是。一般来说,ARC 应用程序由于可以更快地自动释放对象,因此比 MRR 应用程序占用的空间更小。迁移到具有不同选项的新编译器可能只是发现了一个预先存在的问题。

第三,因为您使用的是内存数据库,所以我的第一个测试是将其更改为 SQLite 数据库。它的占用空间要小得多。(虽然您可能会选择稍后返回到内存 DB,但我们正在尝试找出内存耗尽的原因。内存 DB 可以使用大量 RAM。因此,让我们考虑一下。

完成上述第 1 项和第 3 项任务后,请报告您的结果。

安德鲁

于 2012-05-10T20:15:11.613 回答