感谢你对这个问题的帮助,我真的被卡住了。
我的一位测试人员报告我的应用经常崩溃。 iOS日志报告:
Apr 15 23:52:14 iPhone SpringBoard[58] <Warning>: Application 'UIKitApplication:de.loffler.XBMCMusicRemotePro[0x553a]' was killed by jetsam.
Apr 15 23:52:14 iPhone UserEventAgent[26] <Warning>: 440891049998: id=de.loffler.XBMCMusicRemotePro pid=1518, state=0
所以应用程序因内存不足而被杀死。通常,我知道该做什么(寻找泄漏等),然而,有一些问题非常奇怪:
1。内存使用率低
根据JetsamEvent.ips,我的应用程序的内存使用量仅为32MB(如果我正确解释报告:2050个常驻页面* 16384页面大小)。测试仪有一个带有2GB内存的iPhone 6S,所以在崩溃时,应用程序使用不超过设备整个内存的2%。另外,如果我总结报告中所有条目的“rpages”,我只是得到了ca. 620MB的使用量。也许我在读报告时有一些误解......
我编写了一个测试函数,只消耗内存直到应用程序被杀死。在我的iPhone 5S上运行此功能时,应用程序只有在达到600MB内存使用时才会被杀死。
{"timestamp":"2016-04-15 23:52:13.13 +0200","bug_type":"298","os_version":"iPhone OS 9.3 (13E234)"}
{
"crashReporterKey" : "bec1fa98267fbf2d761102140fcf61aa7b6b5e25",
"kernel" : "Darwin Kernel Version 15.4.0: Fri Feb 19 13:54:52 PST 2016; root:xnu-3248.41.4~28\/RELEASE_ARM64_S8000",
"product" : "iPhone8,1",
"incident" : "A2B3C5FF-8ECC-4E07-BEDA-E847061F396B",
"date" : "2016-04-15 23:52:13.13 +0200",
"build" : "iPhone OS 9.3 (13E234)",
"timeDelta" : 1739,
"memoryStatus" : {
"compressorSize" : 76679,
"pageSize" : 16384,
"compressions" : 2526427,
"memoryPages" : {
"active" : 24493,
"throttled" : 0,
"fileBacked" : 24113,
"wired" : 13007,
"anonymous" : 12915,
"purgeable" : 127,
"inactive" : 10955,
"free" : 2290,
"speculative" : 1580
},
"uncompressed" : 125795,
"decompressions" : 143684
},
"largestProcess" : "Facebook",
"processes" : [
{
...
{
"rpages" : 2050,
"states" : [
"frontmost",
"resume"
],
"name" : "KodiMusicRemoteP",
"pid" : 1518,
"reason" : "vm-thrashing",
"fds" : 50,
"uuid" : "5103a88a-917f-319e-8553-c0189dd1abac",
"purgeable" : 127,
"cpuTime" : 4.619693,
"lifetimeMax" : 3557
},
...
}
2。没有记忆警告
我正在将低内存警告写入日志文件(通过Cocoa Lumberjack),但在我的测试人员日志中,我找不到任何此类日志输出。我用我的测试函数测试了代码,它运行良好。
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{
DDLogError(@"applicationDidReceiveMemoryWarning");
[DDLog flushLog];
// ... (do some other stuff, release memory)
}
第3。其他地方都没见过
其他十个beta测试者中没有人报告过这个问题,而我自己也没有看到我的iPhone 5S,它的内存是6S的一半。
4。没有典型的内存崩溃情况
我的测试人员报告该应用程序有时运行正常一段时间,但当它崩溃并重新启动时,它经常会再次快速崩溃(如10秒后)。基于我的应用程序的体系结构,我没有看到内存泄漏如何导致这样的行为。
感谢您的想法, 马库斯