違いは何であるviewDidLoadとはviewDidAppear?これらの関数にはどのような初期化またはカスタムコードが入りますか?
たとえばpresentModalViewController、に存在しviewDidAppear、に存在しない場合にのみ機能しviewDidLoadます。
違いは何であるviewDidLoadとはviewDidAppear?これらの関数にはどのような初期化またはカスタムコードが入りますか?
たとえばpresentModalViewController、に存在しviewDidAppear、に存在しない場合にのみ機能しviewDidLoadます。
回答:
viewDidLoadビューコントローラが最初にメモリにロードされたときに、1回だけ呼び出されます。これは、インスタンス変数をインスタンス化し、このビューコントローラーのライフサイクル全体にわたって存続するビューを構築する場所です。ただし、通常、この時点ではビューはまだ表示されていません。
viewDidAppearビューが実際に表示されているときに呼び出され、View Controllerのライフサイクル中に複数回呼び出すことができます(たとえば、Modal View Controllerが閉じられ、ビューが再び表示されるようになった場合)。これは、UIでレイアウトアクションを実行したり、描画を実行したりする場所です。たとえば、モーダルビューコントローラーを表示します。ただし、ここで行うことはすべて繰り返し可能である必要があります。ここに物を保持しないことをお勧めします。そうしないと、ビューが消えたときにそれらを解放しないとメモリリークが発生します。
参照:https://developer.apple.com/documentation/uikit/uiviewcontroller
viewDidLoad一般的に一度だけ呼び出されますが、もう一度呼び出される可能性がある状況が1つあります。具体的には、を受け取ったdidReceiveMemoryWarning場合、非表示のビューが解放され(ビューコントローラーは変更されていませんが)、戻ったときにviewDidLoad再度呼び出される場合があります。
didReceiveMemoryWarningます。しかし、私はあなたviewDidLoadがあなたを書くときに良い習慣を採用するなら、あなたは大丈夫であるべきだということに同意します。私の唯一のポイントは、ivarのずさんな使用と手動のメモリ管理は、間違いなくでリークを引き起こす可能性があるということviewDidLoadです。人々はdidReceiveMemoryWarningシナリオに敏感であり、それに応じてプログラムする必要があります。
簡単に言えば、で任意のコントロールまたは配列を作成する必要があります。viewDidLoadここで、viewDidAppearこれらのコントロールまたは配列を更新する場所です。
viewDidLoadコントローラの作成時に1回viewDidAppear呼び出され、ビューが表示されるたびに呼び出されます。したがって、提示するモーダルビューがあるとすると、そのビューが却下viewDidAppearされると、呼び出され、viewDidLoad呼び出されません。
viewDidLoad場合があります。(他のビューのスタックの下で)表示されていないビューが、メモリ不足の状況で古いバージョンのiOSによってアンロードされた場合、View Controllerは、画面に再表示する必要があるときにビューを自動的に再読み込みします。iOSの新しいバージョンでは、以前のiOSが行ったことを実行して、メモリ使用量を削減することを選択できます。メッセージが到着したときにオフスクリーンビューをアンロードします。その場合、は再度呼び出されます。didReceiveMemoryWarningviewDidLoad