詳細ビューを設定しました。ルートビューコントローラのテーブルで選択されている項目によっていくつかのNibファイルが読み込まれますか?iPad DetailViewの状況で、viewDidUnloadが呼び出されていない
Nibsクラスの場合、viewDidUnload
は呼び出されませんが、viewWillDisappear
が呼び出され、もちろんdeallocも呼び出されます。
これはなぜでしょうか?
ありがとうございました。
詳細ビューを設定しました。ルートビューコントローラのテーブルで選択されている項目によっていくつかのNibファイルが読み込まれますか?iPad DetailViewの状況で、viewDidUnloadが呼び出されていない
Nibsクラスの場合、viewDidUnload
は呼び出されませんが、viewWillDisappear
が呼び出され、もちろんdeallocも呼び出されます。
これはなぜでしょうか?
ありがとうございました。
viewDidUnload
は、ビューが表示されなくなったときには通常呼び出されません。これは、通常はdealloc
がすべてのメモリダンプを処理するため、viewDidUnload
を最初に呼び出す必要はないからです。
viewDidUnload
が呼び出されたときの例がわかります。 UINavigationController
があり、新しいビューをプッシュしたとします。この新しいビューはメモリ使用量が非常に重いので、アプリはリソースを増やそうとします。これは、画面に現在表示されていないビューがロードされているかどうかを確認することで行います。その場合、viewDidUnload
が呼び出されます。ここでは、loadViewで構築したものを理想的に削除します。viewDidLoad
。その後、そのビューに戻ると、loadViewまたはviewDidLoad
が再び呼び出され、ダンプされた内容がviewDidUnload
に再構築されます。
しかし、詳細ビューを表示するためにメモリを解放する必要がなければ、それは通常の処理では呼び出されません。だからviewWillDisappear
が(そしてdealloc
)呼び出されますが、決してviewDidUnload
が呼び出されます。
Appleのドキュメントから:のUIViewControllerクラスパージ その景色、メモリ不足の警告が発生した場合
それは後で再びそれらをリロードするか、再作成することができます知っていれば。 この場合、viewDidUnloadメソッドを呼び出して、 に、 というビュー階層に関連付けられているオブジェクト(nibファイルでロードされたオブジェクトを含む)、viewDidLoadメソッドで作成されたオブジェクト、 オブジェクトの所有権を放棄することもできます。オブジェクトは実行時に遅れて に作成され、ビュー階層に追加されました。通常、ビュー コントローラにコンセント(IBOutletキーワードの を含むプロパティまたは未加工変数)が含まれている場合は、viewDidUnloadメソッドを使用して、 が不要になったアウトレットまたはその他のビュー関連データの所有権を放棄する必要があります。