再現可能な方法でクラッシュする iPhone アプリをデバッグする際に問題が発生しました。
短編小説:
カスタムUIViewController
が割り当てられ、UINavigationController
のスタックにプッシュされます。しばらくUIViewController
して、 がスタックからポップされます。をスタックにプッシュするとUIViewController
、アプリがクラッシュします。
クラッシュの標準的な手順は、Instruments をNSZombie
有効にして使用することです。オブジェクトの履歴を調べると、私が理解できないことが明らかになりました:
- オブジェクトは 2 つの
autorelease
メッセージを受け取り、 - の
NSAutoreleasePool
ドレイン メソッドは、3 つのリリース メッセージを送信します。
これまでのところ、クラッシュを防ぐ唯一の方法は、問題のオブジェクトにリリース メッセージを 1 つも送信しないことです。これにより、メモリ リークの赤いフラグが立てられます。
私が見落とした他の解決策はありますか?
更新:あなたの一人が明白に指摘したように:
コードに問題があります。自動解放プールのドレインとは関係ありません。
UIViewController
最初のものがデリゲートとして渡されたことが判明したため、呼び出しがナビゲーションコントローラー自体から来UINavigationController
たときに混乱しました。Zombie
間違った質問をする前に、次回はもっと注意する必要があります。