2012-10-11 19 views
1

當視圖第一次出現時,UIViewController中的哪個方法只被調用一次?當視圖第一次出現時,UIViewController中的哪個方法只被調用一次? viewDidLoad中?

我問的原因是我需要調用NSNotificationCenter的addObserver方法,我只需要做一次而且,當視圖看不見時,我不需要調用removeObserver。 (實際上,當視線不在視線範圍內時收到通知時我會做一些光線處理。)

什麼是最佳實踐 - 我應該調用哪種方法? 它是viewDidLoad方法 - 任何人都可以確認,如果這種方法只被調用一次,並從未調用時,隨後出現的視圖?

回答

4

如果視圖控制器以編程方式分配其資源,請創建一個特定於您的視圖控制器的自定義初始化方法。此方法應該調用超類的init方法,然後執行任何類特定的初始化。

一般情況下,不要編寫複雜的初始化方法。相反,實現一個簡單的初始化方法,然後爲您的視圖控制器的客戶端提供屬性來配置其行爲。

2步驟,

  • 視圖控制器調用它的loadView方法

  • 如果視圖控制器與故事板相關聯,它加載從故事板的 視圖。如果視圖控制器未與故事板關聯 ,則會創建一個空的UIView對象並將其分配給 視圖屬性。

視圖控制器調用其viewDidLoad方法,使你的子類,以執行任何額外的載荷 - 時間的任務。

這個圖可以給你一個更好的主意

enter image description here

0

- (void)viewDidLoad方法是在該時間視圖第一次調用加載過程 - (void)viewWillAppear:(BOOL)animated方法是在視時間的通話將呈現處理

但如果你想創建一個在一次調用方法,然後利用全球化方法 由-(id)init它只會調用一次。

+0

這裏的問題是initWithNibName:bundle:被調用。那麼,在這種情況下,如果我把它放在init中,它會被調用嗎? – ikevin8me

+0

creaste自定義方法,它調用 - (id)init方法,所以這個自定義方法立即調用。並在自定義方法中編寫您想要的代碼。 – 2012-10-11 11:31:24

1
-(id)initWithNibName - or - 
-(id)init 

將在任何條件下

至於viewDidLoad而言它也被調用一次,但一旦收到內存警告(不適用於iOS 6雖然)可以被觸發的.viewDidLoad只能調用一次,控制器在viewDidUnload由於內存過載而被觸發後被調用。

1

觀察員,即使在ARC,開始的初始化器方法,醒從筆尖,或viewDidLoad中一個觀察,並註銷在觀察dealloc方法

相關問題