0

詳細ビューをセットアップしました。ルート ビュー コントローラーのテーブルで選択された項目に応じて読み込まれるいくつかの Nib ファイルがありますか。

私が発見したのは、Nibs のクラスでviewDidUnloadは、 が呼び出されることはありませんが、viewWillDisappearが呼び出され、もちろん dealloc も呼び出されることです。

なぜこれになるのか誰にも分かりますか?

ありがとう。

4

1 に答える 1

1

viewDidUnloadビューがビューから消えると、通常は呼び出されないと思います。この理由は、通常、すべてのメモリ ダンプを処理するため、最初deallocに呼び出す必要がないためです。viewDidUnload

viewDidUnloadがいつ呼び出されるかを特定するのに例が役立つと思います。UINavigationControllerを持っていて、新しいビューをプッシュしたとしましょう。この新しいビューはメモリ使用量が非常に多いため、アプリはいくつかのリソースを強化しようとします。これは、現在画面に表示されていないビューがロードされているかどうかを確認することによって行われます。その場合、viewDidUnload理想的には loadView または で作成したものを削除する場所を呼び出しますviewDidLoad。次に、そのビューに戻ると、 loadView またはviewDidLoad再度呼び出して、 でダンプしたものを再構築しviewDidUnloadます。

ただし、詳細ビューを表示するためにメモリを解放する必要がない場合は、通常の処理では呼び出されません。そのためviewWillDisappear、 (and ) と呼ばれますdeallocが、決してviewDidUnload.

Appleのドキュメントから:

メモリ不足の警告が発生すると、後で再読み込みまたは再作成できることがわかっている場合、UIViewController クラスはそのビューを消去します。これが発生した場合は、viewDidUnload メソッドも呼び出して、ビュー階層に関連付けられているすべてのオブジェクトの所有権を放棄する機会をコードに与えます。これには、nib ファイルでロードされたオブジェクト、viewDidLoad メソッドで作成されたオブジェクト、および遅延して作成されたオブジェクトが含まれます。ランタイムに追加され、ビュー階層に追加されます。通常、View Controller にアウトレット (IBOutlet キーワードを含むプロパティまたは raw 変数) が含まれている場合は、viewDidUnload メソッドを使用して、これらのアウトレットまたは不要になったその他のビュー関連データの所有権を放棄する必要があります。

UIViewController クラス リファレンス

于 2011-08-09T11:57:26.347 に答える