View Controller生命週期的各個方法的調用


- (void)awakeFromNib;
這個方法用的時候,outlet還沒有連接起來,是view Controller剛從storyboard建的時候,沒有完全建好,不過可能有一些事情要在這個方法裏面完成,比如splitViewDelegate,需要在非常早期完成。

- (void)viewDidLoad;
用這個的時候,ViewController已經完全好了,outlet也已經連接好了。但是還沒有在屏幕上顯示出來。
這個方法裏面可以放很多設置的代碼。
這個方法執行的時候,view的bounds還沒有。先load,再appear嘛。

- (void)viewWillAppear:(BOOL)animated;
這個方法調用的時候,bounds已經有了。
你的視圖只會loaded一次,但是會appear或者disappear很多次。
所以不變的東西,放在viewDidLoad裏面。和幾何相關的,放在viewWillAppear裏面。這點對項目的優化很重要的哦。。。哈哈
就好似頂層的view,旋轉ipad什麼的都需要改變頂層的view的大小,當一個view controller的生命週期到這裏的時候,就可以在這裏的最後時刻來調整view的排列或者幾何特性。
這裏也設置做一些lazy execution for performance.比如:需要按一個button,出現一個view什麼的。
這裏設置,開銷很大。耗時很長的事情最好在viewWillAppear裏另開一個線程運行,然後在view裏面放一個小小的spinning wheel。

- (void)viewWillDisappear:(BOOL)animated
{
       [super viewWillDisappear:animated];
       [self rememberScrollPosition];
       [self saveDataToPermanentStore];
}
這個方法當然是要消失的時候啦。要消失的時候,還是記得現在的運行情況的。所以可以記得scroll的position啦。但是,不要在這個方法裏面寫太多的東西哦,app會崩潰的。
另開線程來處理任何UI的改變,或者如果是不怎麼廢資源的話就直接寫入硬盤。

- (void)viewDidAppear:(BOOL)animated;
- (void)viewDidDisappear:(BOOL)animated;

will的did版本。
在view顯示之後使用。

- (void)viewWillLayoutSubviews;            did版本:- (void)viewDidLayoutSubviews;
在由frame的改變而觸發輸出subview之前,這個方法被調用
比如,在autorotation後,佈局發生改變,此時可以設置subview的佈局。


關於ratation的更多方法:
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)anOrientation duration:(NSTimeInterval)seconds;
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOriention)orient duration:(NSTimeInterval)seconds;
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)anOrientation;
@property UIInterfaceOrientation interfaceOrientation;
生命週期裏一個低內存的情況:
- (void)viewDidUnload
{
   self.faceView = nil;
}
低內存的時候,系統會卸載你的view,將會把你的controller的view從內存中清除出去,也就是停止所有有strong指向的指針。
但是對應的viewController是不會從heap清除出去的。
但是,還是要把其他的outlet指針都設置爲nil,因爲,就怕其他的view有指向這個類型的strong指針,所以就不太一樣了。所以要養成好習慣,把outlet型的指針設置爲nil。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章