8

明確にする必要があるのではないかと疑っています.スタックとナビゲーションコントローラーがあります.スタックがロードviewDidLoad viewWillAppear viewDidAppearされると、が呼び出されます。いくつかのボタンをクリックすると、このボタンが新しいスタックにプッシュされ、新しいスタックが背面のオプションを提供します..今、ナビゲーションコントローラーの背面をクリックするviewWillAppearと..なぜ呼び出されるのか..なぜ呼び出されないviewDidLoadのかいいえviewDidAppear

4

4 に答える 4

18

スタックは後入れ先出し (LIFO) であるため、新しいビュー コントローラーをスタックにプッシュしても、以前のビュー コントローラーは破棄されず、メモリに残ります。ポップバックすると、Viewcontroller は既にメモリ内にあるため、再作成する必要はありません。したがって、viewWillAppear呼び出されるだけです。

この場合に呼び出されない理由についてviewDidAppearは、これを読んだ場所を思い出せませんがviewDidAppear、UIViewController のビューがアプリケーションの UIWindow 階層に追加された後に呼び出されます。このプロセスは、UIViewController が初めて表示される前に行われます。

viewDidLoadviewControllers ビューがメモリにロードされたときにのみ呼び出されます。いつになるか

  1. 初めてビューを表示する必要があるとき
  2. メモリ不足の理由でメモリからパージされるため、viewController を再度リロードする必要がある場合があります。

あなたの場合、ポップバックすると、viewController は既に読み込まれているため、viewDidLoad再度呼び出す必要はありません。

于 2013-03-11T05:33:20.973 に答える
13

ios ui の完全なライフサイクルについては、こちらで説明しています。ここに画像の説明を入力

http://www.verydemo.com/demo_c134_i4568.html

コメントからのAbizernによるメモ:これはiOS5以前に当てはまります。iOS6 はビューをアンロードしなくなりました。

于 2013-03-11T05:29:31.117 に答える
3

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!!

于 2013-03-11T05:38:49.533 に答える
2

完全な答えはありませんが、これが役立つことを願っています。

viewDidLoad は、ロード イベントが発生した後にビューを変更するためのコールバックです。あなたの場合、ビューはすでに読み込まれています。ビューにないという事実は、メモリからアンロードされたことを意味しません。

viewDidAppear: このイベントが発生しない理由はわかりませんが、他の誰かがギャップを埋めてくれれば幸いです。

于 2013-03-11T05:28:46.603 に答える