我有一段时间没遇到问题了,我想知道是否有人可以提供帮助.我正在使用主导航控制器和大量UIImage开发IOS应用程序(iPad).在使用该应用程序一段时间之后,应用程序因低内存而死(不是在特定视图中)但是通过检查iPad日志,我并不总是看到低内存警告(有时候我会这样做,有时候我没有).即使我收到一个,它只是" 收到低内存警告 ",但我从未得到" 1级 "或" 2级 ".
通过使用xCode的泄漏仪器,我找不到任何泄漏.
有人可以帮忙吗?
内存警告作为通知发送,因此一旦有机会,它将在runloop上排队等待发送.如果你要写一个(故意破坏)循环,如:
while(1) { NSString *newString = [NSString string]; }
然后最终你的应用程序将由于内存不足而被杀死但是没有机会它可以接收低内存警告.
如果你因为内存不足而没有收到警告而被杀,那么你可能在某个地方为自己创造了一个内存瓶颈,可能你有某种循环在自动释放池中留下了很多东西 - 所以,如果你得到的话一直到循环,然后临时对象消失,因此没有长期足迹,但它们会一直累积在循环中.
为了避免这种情况,你想看看在自己的NSAutoreleasePool
s 中嵌套循环的内部部分.例如,这个循环:
while(1) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSString *newString = [NSString string]; [pool drain]; // stylistically preferred to release, but equivalent // in reference counted environments }
将永远持续但不会触发低内存条件.
你也可以尝试内存泄漏,Apple的Xcode开发环境提供了一个内存泄漏检测工具,最简单的运行方式来自于
Xcode:1.Product - > 2.Start with Performance Tool(Profiler) - > 3.从仪器选择Leaks.
它似乎非常擅长检测内存泄漏,并且易于弄清楚.