20

viewDidUnloaddeallocの両方がであるかどうかを知りたいのですが、UIViewControllerのティアダウンプロセスでは常にと呼ばれています。 viewDidUnloadが最初に呼び出されていないと、deallocがビューコントローラで呼び出せますか?UIViewControllerを分解するときに、常にviewDidUnloadとdeallocが呼び出されますか?

どちらの場合でも、どちらのメソッドでもプロパティと保持された参照を安全に解放しても問題はありませんが、ティアダウンプロセス。

2012アップデート:それがあるかのようにiOSの6 viewDidUnloadは廃止されたとdidReceiveMemoryWarningでを必要に応じて手動ビューのティアダウンを交換する必要があることに注意することは便利です。

新しいUIViewの/ UIViewContollerに良い記事と新しい行動とそれがjoe conway blog

答えて

35

viewDidUnloadへの影響がdealloc方法などのたびに呼び出されることはありませんです。 viewDidUnloadは、アプリがメモリ不足の警告を受け取った場合にのみ呼び出されます。

viewDidUnloaddeallocの両方の方法でオブジェクトを解放している場合は、両方が両方とも呼び出されると、あなたはすでにリリースされているオブジェクトを解放しています。アプリケーションのクラッシュにつながるでしょうか? viewDidUnloadは、私たちにメモリ制限があることを知っているため、低メモリ警告を受け取ったときにアップルが提供するものです。

+1

答えに 'viewDidLoad'と言うとき、あなたは' viewDidUnload'を意味すると思います。 'viewDidLoad'はメモリが足りないときに呼び出されるのではなく、画面が(viewWillAppear'の前に)表示されるときに呼び出されます。 'viewDidUnload'はメモリ不足の警告があるときに呼び出されます。 –

+0

これは正解であったはずです。これは今日私を困らせる。 – asandroq

+0

viewDidUnloadの中でself.whatever = nilを実行し、deallocの中で[_whatever release]を呼び出すのは大丈夫でしょう。そうすることで、viewDidUnloadが最初に呼び出された場合、アイテムはdeallocでオーバーリレースされません。これは、nilされていないためで、リリースメッセージはnilに送信されるとすぐに消えます。誰でもこれを確認できますか? – jpswain

0

viewDidiUnloadメソッドは、メモリ警告が表示されたときにのみ呼び出されることが非常に賢明です。この方法でオブジェクトを必要条件を解放し、オブジェクトをゼロにすることをお勧めします。