所以应用程序崩溃了,没有堆栈跟踪或任何异常,我每次都可以复制这个崩溃。我的第一个想法是它必须是双重发布,在运行僵尸10分钟后,我无法让应用程序崩溃,甚至一次都没有。
查看 Allocations 后,我注意到在调用该方法时分配的对象的大小发生了巨大的跳跃。所以我最终在 for 循环中有一个 @autoreleasePool 。这个自动释放池修复了崩溃;但是我如何确认这确实是内存不足的问题?(didRecieveMemoryWarning 在崩溃前的任何时候都没有被调用)
为什么 autoreleasePool 解决了这个问题?
为什么没有调用 didRecieveMemoryWarning?是不是因为在我们到达当前运行循环结束之前应用程序内存不足?
- (void)doSomething
{
for (Item *item in self.items)
{
@autoreleasepool
{
// A bunch of initializations here that take a lot of memory
}
}
}