iOS应用程序因内存不足而死亡,但未收到内存警告

一段时间以来,我遇到了一个问题,我想知道是否有人可以帮忙。 我正在开发一个IOS应用程序(iPad),使用主导航控制器和大量的UIImage。 在使用应用程序一段时间后,应用程序因为内存不足而死亡(不是特定的视图),但通过检查iPad日志,我并不总是看到低内存警告(有时候我会,有时候我不会)。 即使我收到一个,它只是“ 收到低内存警告 ”,但我从来没有得到“ 1级 ”或“ 2级 ”。

通过使用xCode的泄漏仪器,我找不到任何泄漏。

谁能帮忙?

内存警告是作为通知发送的,所以一旦机会出现,它就会在runloop上排队等待分派。 如果你要写一个(故意破坏的)循环,如:

while(1) { NSString *newString = [NSString string]; } 

然后,最终你的应用程序将因内存不足而被杀害,但是没有机会获得低内存警告。

如果由于内存不足而导致内存不足而死亡,那么您可能在某个地方为自己创build了一个内存瓶颈,可能是因为某种循环会在autorelease池中留下很多东西 – 所以,如果您获得在整个循环过程中,临时对象消失,因此没有长期的足迹,但是它们一直在循环中积累。

为了避免这种情况,你需要在自己的NSAutoreleasePool中嵌套循环的内部部分。 例如,这个循环:

 while(1) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSString *newString = [NSString string]; [pool drain]; // stylistically preferred to release, but equivalent // in reference counted environments } 

将永远持续下去,但永远不会触发低内存条件。

您也可以尝试内存泄漏,苹果的Xcode开发环境提供了一个内存泄漏检测工具,最简单的方法来运行它是直接从

Xcode:1.Product – > 2.使用性能工具(Profiler) – > 3.从仪器selectLeaks。

在检测内存泄漏方面似乎非常好,并且很容易弄清楚。