1. 程式人生 > >View Controller生命週期的各個方法的呼叫

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。