2

ARCを使用するように変換した古いアプリがあります。元のバージョンにはメモリリークがなく、デバッガーのメモリ診断を使用して変換後のすべてのエラーを修正しました。場合によっては、アプリがクラッシュし、スタックトレースが、次のようにARCが無限の保持サイクルまたはリリースサイクルでスタックしているように見えることがあります。

0   CoreFoundation                  0x329046a6 CFRelease + 46
1   CoreFoundation                  0x329046da CFRelease + 98
2   CoreFoundation                  0x329046da CFRelease + 98
3   CoreFoundation                  0x329046da CFRelease + 98
4   CoreFoundation                  0x329046da CFRelease + 98

残念ながら、スタックトレースは512エントリで途切れているため、このチェーンがどこから始まったのかわかりません。Appleは、これはallocメソッドとinitメソッドが分離されていて、initメソッドがallocとは異なるオブジェクトを返す場合に発生する可能性があると述べています。すべての割り当てを確認しましたが、推奨される形式に従います。

Class *var = [[Class alloc] initMethod:arg];

この種の無限ループを見た人はいますか?Xcodeデバッガーを使用しているときにそれをキャッチできず、非常に一貫性がありません。ARCは保持と解放を注入しているので、クラッシュがどこで発生したのかわかりません。

4

0 に答える 0