2012-05-09 36 views
2

我最近将我的iOS项目转换为ARC。我的项目中有两个目标。一个是应用程序本身,另一个是一组GHUnit测试。我有大约200个测试,在创建和修改Core Data对象方面做了很多工作。测试使用的Core Data存储区是内存存储区,并且在测试完成后即被丢弃(即不会在任何地方持久存储)。当我的测试运行了一段时间(在错误被抛出之前,他们从未达到完全相同的点,但它总是在相同的测试周围),应用程序崩溃时出现EXC_BAD_ACCESS(代码= 2,地址= .. 。)GHUnit在iOS项目转换为ARC后给出allocate_pages()错误

在控制台输出如下: Console Output

我已经按照说明操作here in this answer,并设置GHUnit目标使用-fno-objc-arc编译器标志我的main.m文件,但没有按似乎没有帮助。

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

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

谢谢!

回答

1

克里斯,

首先,当你有一个内存耗尽的问题,你应该看一下仪器配置工具下运行测试。请记住打开虚拟机自动快照。然后,您应该在测试执行时多次标记堆。

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

第三,因为您使用的是内存数据库,所以我的第一个测试就是将其更改为SQLite数据库。它可以有更小的占地面积。 (虽然你可能选择在以后回到内存DB,但是我们试图找出内存耗尽的原因,一个内存中的数据库可以使用大量的内存,因此,让我们不要这样做:

一旦你完成了第1和第3次以上的任务,请汇报你的结果。

安德鲁

+0

谢谢!你说得对,运行内存不足。我用仪器来调查原因,并在-memory数据库变得太大了,我保留了内存数据库,但现在在tearDownClass方法中设置了managedObjectContext为null。 –

相关问题