この問題についてご協力いただきありがとうございます。本当に困っています。
ベータ テスターの 1 人が、アプリの頻繁なクラッシュを報告しています。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 の RAM を搭載した iPhone 6S を使用しているため、クラッシュの時点で、アプリはデバイスのメモリ全体の 2% しか使用していません。さらに、レポート内のすべてのエントリの "rpages" を合計すると、およそ . 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. 他では見られない
他の 10 人のベータ テスターの誰もこの問題を報告しておらず、6S の半分のメモリしか搭載していない私の iPhone 5S では、私自身もこの問題を見たことがありません。
4. 典型的なメモリ クラッシュ シナリオはありません
私のテスターは、アプリがしばらくの間正常に動作することがあると報告しましたが、クラッシュして再起動すると、すぐに再びクラッシュすることがよくあります (10 秒後など)。アプリのアーキテクチャに基づいて、メモリ リークがどのようにこのような動作を引き起こすかわかりません。
アイデアをありがとう、マーカス