明確にする必要があるのではないかと疑っています.スタックとナビゲーションコントローラーがあります.スタックがロードviewDidLoad
viewWillAppear
viewDidAppear
されると、が呼び出されます。いくつかのボタンをクリックすると、このボタンが新しいスタックにプッシュされ、新しいスタックが背面のオプションを提供します..今、ナビゲーションコントローラーの背面をクリックするviewWillAppear
と..なぜ呼び出されるのか..なぜ呼び出されないviewDidLoad
のかいいえviewDidAppear
4 に答える
スタックは後入れ先出し (LIFO) であるため、新しいビュー コントローラーをスタックにプッシュしても、以前のビュー コントローラーは破棄されず、メモリに残ります。ポップバックすると、Viewcontroller は既にメモリ内にあるため、再作成する必要はありません。したがって、viewWillAppear
呼び出されるだけです。
この場合に呼び出されない理由についてviewDidAppear
は、これを読んだ場所を思い出せませんがviewDidAppear
、UIViewController のビューがアプリケーションの UIWindow 階層に追加された後に呼び出されます。このプロセスは、UIViewController が初めて表示される前に行われます。
viewDidLoad
viewControllers ビューがメモリにロードされたときにのみ呼び出されます。いつになるか
- 初めてビューを表示する必要があるとき
- メモリ不足の理由でメモリからパージされるため、viewController を再度リロードする必要がある場合があります。
あなたの場合、ポップバックすると、viewController は既に読み込まれているため、viewDidLoad
再度呼び出す必要はありません。
ios ui の完全なライフサイクルについては、こちらで説明しています。
http://www.verydemo.com/demo_c134_i4568.html
コメントからのAbizernによるメモ:これはiOS5以前に当てはまります。iOS6 はビューをアンロードしなくなりました。
First of all, nice question @user2102546. Checkout here the perfect reason for your query.
viewDidLoad only gets called if view controller's views were unloaded, and need to be reloaded.
Normally, if you use a navigation controller, and go back to a previous view with one of the pop methods, viewDidLoad does not get called again, because the view are not unloaded yet
.
However, the system can unload the views of any view controller when it is not frontmost in order to free up memory, so viewDidLoad can get called any time a view controller is about to be presented. You need to write your code to respond correctly to the different events.
Enjoy Programming!!
完全な答えはありませんが、これが役立つことを願っています。
viewDidLoad は、ロード イベントが発生した後にビューを変更するためのコールバックです。あなたの場合、ビューはすでに読み込まれています。ビューにないという事実は、メモリからアンロードされたことを意味しません。
viewDidAppear: このイベントが発生しない理由はわかりませんが、他の誰かがギャップを埋めてくれれば幸いです。