我有疑問需要清楚..我有堆棧和導航控制器。現在當堆棧加載viewDidLoad
viewWillAppear
viewDidAppear
將被調用。當我點擊一些按鈕,然後這個按鈕把我推到新的堆棧,現在新的堆棧給了我後面的選項..現在,當我點擊導航控制器的背面..爲什麼只有viewWillAppear
將被稱爲..爲什麼不viewDidLoad
而不是viewDidAppear
爲什麼只有viewWillAppear調用導航回
回答
棧是後進先出(LIFO),所以當你將新的視圖控制器推送到堆棧時,以前的viewcontroller不會被銷燬(並且它們保留在內存中)。當您回彈時,無需重新創建Viewcontroller,因爲它已經在內存中。所以只有viewWillAppear
被調用。
至於爲什麼viewDidAppear
在這種情況下沒有被調用,我不記得我在哪裏讀過這個,但是當你的UIViewController的視圖被添加到應用程序的UIWindow層次後,viewDidAppear
被調用。這個過程是在UIViewController第一次顯示之前完成的。
viewDidLoad
只有當viewControllers視圖加載到內存中時纔會調用。因爲 是從內存中清除了一些低內存的原因時,需要顯示
- 第一次認爲它會做。
在你的情況下,當你回彈的時候,viewController已經被加載了,所以不需要再次調用viewDidLoad
。
yaa ok我知道了......但爲什麼不'viewDidAppear'和'viewDidLoad' – Christien 2013-03-11 05:37:11
@Christien請參閱編輯 – Krishnabhadra 2013-03-11 05:42:45
好吧然後在你的情況下..'viewWillAppear'和'ViewDidAppear'應該被稱爲ryt ...但是' viewWillAppear'只叫'不叫'ViewDidAppear' – Christien 2013-03-11 05:51:23
我沒有一個完整的答案給你,但我希望這有助於。
viewDidLoad是加載事件發生後修改視圖的回調函數。在你的情況下,視圖已經加載。它不在意的事實並不意味着它已從記憶中卸載。
viewDidAppear:雖然我不知道爲什麼這個事件沒有發射,並且如果有其他人填補這個空白,會很開心。
ios ui的完整生命週期在這裏解釋。
http://www.verydemo.com/demo_c134_i4568.html
注意通過Abizern從評論:這是真實的的iOS5和更早版本。 iOS6不再卸載視圖。
添加從哪裏得到這個屏幕截圖的參考:) – 2013-03-11 05:31:43
亞,但沒有得到邏輯Ÿ只有'viewWillAppear'將被調用導航回...沒有其他 – Christien 2013-03-11 05:35:26
因爲當你回到那個視圖控制器已經創建。 viewDidLoad只在已經創建的時候調用它纔會觸發。 ViewWill在每次屏幕顯示時都會調用。 – 2013-03-11 05:40:21
首先,很好的問題@ user2102546。在此處簽出您查詢的完美理由。
viewDidLoad只有在視圖控制器的視圖被卸載並且需要重新加載時纔會被調用。
通常情況下,如果您使用導航控制器,並使用其中一種彈出方法回到以前的視圖,則可使用viewDidLoad does not get called again, because the view are not unloaded yet
。
然而,系統可以卸載任何視圖控制器的視圖,當視圖控制器不是最前面的時候,爲了釋放內存,所以viewDidLoad可以在視圖控制器即將呈現時隨時調用。您需要編寫代碼以正確響應不同的事件。
享受編程!
如果我們考慮Hasintha的上面的圖片和你的答案...'viewDidLoad不會被再次調用,因爲視圖還沒有被卸載.'罰款..'viewdidload不會稱爲未卸載,但viewWillAppear和ViewDidAppear都應該被稱爲' – Christien 2013-03-11 05:46:25
@Christien,是的,這兩個viewWillAppear&ViewDidAppear,都將在導航返回時調用。 – 2013-03-11 05:53:28
- 1. 爲什麼viewWillAppear沒有被調用?
- 2. 爲什麼導航控制器不使用Swift在回調中導航?
- 3. viewWillAppear只被調用一次
- 4. 爲什麼viewDidAppear/viewWillAppear不會在嵌套結構中調用?
- 5. 爲什麼Apple建議我們不要調用viewWillLoad,viewWillAppear,viewDidDisappear等?
- 6. 當我使用presentModelViewController時,爲什麼viewWillAppear沒有在我的UITabBArController中調用?
- 7. 爲什麼我的回調只在一頁上被調用?
- 8. 導航欄顯示隱藏它viewWillAppear中
- 9. 爲什麼返回值只有南?
- 10. viewWillAppear和viewDidAppear不調用,而viewDidLoad調用什麼時在UIViewController
- 11. 爲什麼調用ProcessGroupPolicyEx回調會導致訪問衝突?
- 12. 爲什麼不調用回調?
- 13. chrome.webstore.install調用兩個回調?爲什麼?
- 14. 爲什麼從不調用server.close回調?
- 15. 爲什麼GoogleAuth.then()停止調用回調?
- 16. 爲什麼沒有執行回調? - Smalltalk
- 17. 爲什麼SQLiteOpenHelper不是隻調用SQLiteHelper?
- 18. 爲什麼activeresource.rb只是調用active_resource.rb?
- 19. 爲什麼只能調用SmtpClient.SendAsync一次?
- 20. 在viewwillappear中添加自定義導航欄會導致導航速度變慢?
- 21. 什麼是viewWillAppear的NSDocument
- 22. OSMdroid繼續導航回到setcenter的位置,爲什麼?
- 23. 爲什麼導航列表返回到位置0?
- 24. 爲什麼導航欄不固定?
- 25. 爲什麼我的導航欄重複?
- 26. 爲什麼我的導航欄不能調整大小?
- 27. 爲什麼沒有我的OData響應具有導航性能
- 28. 我的導航欄有什麼問題?
- 29. 爲什麼不socket.io回調觸發特快航線
- 30. 爲什麼不回調
viewDidAppear必須被調用。嘗試把NSLog,而不是如果你正在檢查斷點 – 2013-03-11 05:48:43
'viewDidAppear'總是被我的應用程序調用。確保在你調用'[super viewWillAppear:animated]''的'viewWillAppear:'方法中。也可以在其他方法中調用正確的[super xxx]。 – rmaddy 2013-03-11 05:53:32