UIViewControllerで奇妙な(非?)問題が発生しました。それはコントローラがdeallocされたときに、そのサブビューを解放していないようです。サブビューのdeallocメソッドとビューコントローラのすべてにNSLogメッセージを配置しました。ビューコントローラdeallocは呼び出されますが、サブビューは呼び出されません。しかし、そのビューコントローラの別のインスタンスをナビゲーションスタックにプッシュすると、前のインスタンスのすべてのサブビューが解放されたように見えます(コンソールにNSLogメッセージが表示されます)。私はチェックして、プレゼンテーション・ビュー・コントローラー(プッシュしているビュー・コントローラー)のカスタム・ビュー・コントローラーへの個別の参照はありません。dealloc(ARCを使用)を使用している場合、UIViewControllerはサブビューを解放しません。
小さい(多分)詳細:カスタムビューコントローラは、格納してからポップする前に実行するブロックを受け取ります。しかし、私はそれに無関係を送りました、そして、私は同じ振る舞いをします。さらに、プレゼンテーション・ビュー・コントローラはスタックがポップされたときにデアロックするため、保持するサイクルはありません。
また、カスタムビューコントローラーのdeallocメソッドで各ビューを明示的に解放しようとしました。同じ振る舞い。
ナビゲーションコントローラがそれを保持している可能性はありますか?私の他のView Controllerのいずれにもこれを行うようには見えません。
私の問題は、(これらのすべてのサブビューの)メモリリークを表していることです。漏れは積み重ねませんが、まだ漏れです。あなたは多分それは試して
最小の例が役立ちます。 – Joe
私は@Joeに同意し、いくつかのコードを共有します。特に、前にブロックが漏れているという問題がありました。コードパスが実行されない限り、これをnilに設定しても問題ありません。 – Sam
申し訳ありませんが、例がありませんが、これは2つのクラス、合計で約1,000行のコードと関係があります。そのコードのどこに問題が発生しているのかわかりません。 –