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

- (void)awakeFromNib;
這個方法用的時候,outlet尚未鏈接起來,是view Controller剛從storyboard建的時候,沒有徹底建好,不過可能有一些事情要在這個方法裏面完成,好比splitViewDelegate,須要在很是早期完成。
 

- (void)viewDidLoad;app

用這個的時候,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。
相關文章
相關標籤/搜索