加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 01:50:41 所属栏目:百科 来源:网络整理
导读:我现在已经遇到问题一段时间了,我想知道是否有人可以提供帮助. 我正在开发一个使用主导航控制器和大量UIImage的IOS应用程序(iPad). 使用该应用程序一段时间后,该应用程序因低内存(不是在特定视图中)而被杀死但是通过检查iPad日志,我并不总是看到低内存警告(
我现在已经遇到问题一段时间了,我想知道是否有人可以提供帮助.
我正在开发一个使用主导航控制器和大量UIImage的IOS应用程序(iPad).
使用该应用程序一段时间后,该应用程序因低内存(不是在特定视图中)而被杀死但是通过检查iPad日志,我并不总是看到低内存警告(有时候我会这样做,有时候我没有).
即使我收到一个,它只是“收到低内存警告”但我从未得到“1级”或“2级”.

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

有人可以帮忙吗?

解决方法

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

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

然后最终你的应用程序将由于内存不足而被杀死,但没有机会它可以接收低内存警告.

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

为了避免这种情况,你想看看在自己的NSAutoreleasePools中嵌套循环的内部部分.例如,这个循环:

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读