即使在我释放大量内存以响应低内存警告之后,我也无法弄清楚为什么 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() 函数一起显示,该函数基于此答案中的代码。
作为记录,我使用SDWebImage将 UIImages 缓存在内存中,但如图所示,它通过清空其缓存(此时相当大)来处理内存警告。我意识到我可以调整 SDWebImage 的缓存以不填充所有可用内存并等待内存警告,但这引出了以下问题......
为什么 iOS 会终止我的应用程序,即使我通过愉快地释放大量内存来响应内存警告?