【发布时间】:2012-01-20 13:38:13
【问题描述】:
即使在我释放大量内存以响应内存不足警告之后,我也无法弄清楚为什么 iOS 会由于内存使用而终止我的应用程序(iPad、iOS 4)。例如,这是一个典型的终止场景,我经常记录内存使用情况——查看“app”使用情况,即每行的第一个 KB 值:
...
2011-12-14 13:25:42.343 Oyster[211:707] Memory usage (KB): app 268256, delta 6472, used 366800/373940
2011-12-14 13:25:43.292 Oyster[211:707] Memory usage (KB): app 273900, delta 5644, used 372444/381024
2011-12-14 13:25:44.159 Oyster[211:707] Memory usage (KB): app 282920, delta 9020, used 381464/389116
2011-12-14 13:25:45.184 Oyster[211:707] Memory usage (KB): app 272140, delta -10780, used 370684/379432
2011-12-14 13:25:46.109 Oyster[211:707] Memory usage (KB): app 260412, delta -11728, used 358956/365900
2011-12-14 13:25:48.443 Oyster[211:707] Received memory warning. Level=2
2011-12-14 13:25:48.454 Oyster[211:707] Memory usage (KB): app 9172, delta -251240, used 107716/112548
(gdb)
您可以看到应用内存使用量不断增加,直到收到内存警告。然后我正确响应内存警告并释放一堆(250MB!)内存。那时我的应用程序被终止,iOS 进入 iPad 主屏幕。
此处的“内存使用”日志与我的 logMemoryUsage() function 一起显示,它基于来自 this answer 的代码。
作为记录,我使用SDWebImage 将 UIImages 缓存在内存中,但如图所示,它通过清空其缓存(此时相当大)来处理内存警告。我意识到我可以调整 SDWebImage 的缓存以不填满所有可用内存并等待内存警告,但这引出了以下问题......
为什么 iOS 会终止我的应用程序,即使我通过愉快地释放大量内存来响应内存警告?
【问题讨论】:
-
请包含终止日志。其他地方可能存在不相关的错误。
-
什么是“终止日志”,如何查看?
-
开启调试器。当应用程序崩溃时,控制台应该有一条类似“App terminating due to...”的消息
-
我在 Xcode 调试器中。 “(gdb)”之后根本没有任何消息——那是最后一个控制台日志。还有什么我需要启用的吗?
-
在仪器中使用分配,模拟内存警告,检查内存是否确实被释放...
标签: objective-c ios memory-management terminate sdwebimage