IOS应用程序因低内存而被杀死,但未收到内存警告

时间:2011-12-09 12:00:27

标签: ios xcode ipad memory memory-leaks

我现在已经遇到问题一段时间了,我想知道是否有人可以提供帮助。 我正在使用主导航控制器和大量UIImage开发IOS应用程序(iPad)。 在使用该应用程序一段时间之后,应用程序因低内存而死(不是在特定的视图中)但是通过检查iPad日志,我并不总是看到低内存警告(有时候我会这样做,有时候我没有)。 即使我收到一个,它只是“收到低记忆警告”,但我从未得到“ 1级”或“ 2级”。< / p>

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

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:9)

内存警告作为通知发送,因此一旦有机会,它将在runloop上排队等待发送。如果你要写一个(故意破坏)循环,如:

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

然后最终你的应用程序会由于内存不足而被杀死但是没有机会能够获得低内存警告。

如果由于内存不足而没有收到警告而被杀,那么你可能在某处为自己创建了一个内存瓶颈,可能你有某种循环在自动释放池中留下了很多东西 - 所以,如果你完全通过循环,那么临时对象就会消失,因此没有长期的足迹,但是它们会一直累积在你的循环中。

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

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

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

答案 1 :(得分:5)

你也可以尝试内存泄漏,Apple的Xcode开发环境提供了内存泄漏检测工具,最简单的运行方式是直接来自

的Xcode: 1.产品 - &gt; 2.开始使用Performance Tool(Profiler) - &gt; 3.从仪器选择泄漏。

它似乎非常擅长检测内存泄漏,并且易于弄清楚。