iOS中視圖是一個應用的重要組成部分,功能的實現與其息息相關,而視圖控制器控制著視圖,其重要性在整個應用中不言而喻。
視圖生命周期與視圖控制器關系
以視圖的5種狀態為基礎,我們來系統的了解一下視圖控制器的生命周期。在視圖不同的生命周期,視圖控制器會回調不同的方法。
viewDidLoad方法:視圖控制器已被實例化,在視圖被加載到內存中的時候調用該方法,這個時候視圖並未出現。在該方法中通常進行的是對所控制的視圖進行初始化處理。
視圖可見前後會調用viewWillAppear:方法和viewDidAppear:方法;視圖不可見前後會調用viewWillDisappear:方法和viewDidDisappear:方法。 4個方法調用父類相應的方法以實現其功能, 編碼時該方法的位置可根據實際情況做以調整,參見如下代碼:
[cpp]
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:YES];
… …
}
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:YES];
… …
}
viewDidLoad方法在應用運行的時候只調用一次,而這上述4個方法可以被反復調用多次,它們的使用很廣泛但同時也具有很強的技巧性。例如:有的應用會使用重力加速計,重力加速計會不斷輪詢設備以實時獲得設備在z軸、x軸和y軸方向的重力加速度。不斷的輪詢必然會耗費大量電能進而影響電池使用壽命,我們通過利用這4個方法適時地打開或者關閉重力加速計來達到節約電能的目的。怎麼使用這4個方法才能做到“適時”是一個值得思考的問題。
iOS系統在低內存時情況下會調用didReceiveMemoryWarning:和viewDidUnload:方法。iOS6之後就不再使用viewDidUnload:,而僅支持didReceiveMemoryWarning:。didReceiveMemoryWarning:方法的主要職能是釋放內存,包括視圖控制器中的一些成員變量和視圖的釋放。現舉例如下:
[cpp]
- (void)didReceiveMemoryWarning {
self.button = nil;
self.myStringD = nil;
[myStringC release];
[super didReceiveMemoryWarning];
}
- (void)didReceiveMemoryWarning {
self.button = nil;
self.myStringD = nil;
[myStringC release];
[super didReceiveMemoryWarning];
}