日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS视图生命周期

發布時間:2024/10/12 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS视图生命周期 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  視圖是應用的一個重要組成部分,功能的實現與其息息相關,而視圖控制器控制著視圖,其重要性在整個應用中不言而喻。

1.視圖生命周期與視圖控制器關系

  以視圖的4 種狀態為基礎,我們來系統了解一下視圖控制器的生命周期。在視圖不同的生命周期中,視圖控制器會回調不同的方法,具體如圖1 所示。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

         ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??圖1?視圖控制器的一些主要方法

  在視圖控制器已被實例化,視圖被加載到內存中時調用viewDidLoad方法,這個時候視圖并未出現。在該方法中,通常進行的是對所控制的視圖進行初始化處理。
  視圖可見前后會調用viewWillAppear:方法和viewDidAppear: 方法;視圖不可見前后會調用viewWillDisappear: 方法和viewDidDisappear:方法。4個方法調用父類相應的方法以實現其功能,編碼時該方法的位置可根據實際情況做以調整,參見如下代碼:

-(void)viewWillAppear:(BOOL)animated { [super viewWillAppear:YES]; …… }

  viewDidLoad 方法在應用運行的時候只調用一次,而這上述4 個方法可以被反復調用多次,它們的使用很廣泛但同時也具有很強的技巧性。例如,有的應用會使用重力加速計,重力加速計會不斷輪詢設備以實時獲得設備在z 軸、x 軸和y軸方向的重力加速度。不斷的輪詢必然會耗費大量電能進而影響電池使用壽命,我們通過利用這4個方法適時地打開或者關閉重力加速計來達到節約電能的目的。怎么使用這4 個方法才能做到“適時”是一個值得思考的問題。?

  在低內存情況下,iOS 會調用didReceiveMemoryWarning: 和viewDidUnload:方法。在iOS 6 之后,就不再使用viewDidUnload:,而僅支持didReceiveMemoryWarning:。didReceiveMemoryWarning: 方法的主要職能是釋放內存,包括視圖控制器中的一些成員變量和視圖的釋放。現舉例如下:

- (void)didReceiveMemoryWarning { self.button = nil; self.myStringD = nil; [myStringC release]; //ARC內存管理情況下不用 [super didReceiveMemoryWarning]; }

  除了上述5 個方法視圖控制器外,還有很多其他方法。

2.iOS ?UI 狀態保持和恢復

  iOS 設計規范中要求,當應用退出的時候(包括被終止運行的時候),需要保持界面中UI元素的狀態,當再次進來的時候看到的狀態與退出時是一樣的。在iOS 之后,蘋果提供以下API使得UI狀態保持和恢復變得很容易。
  在iOS 中,我們可以在以下3種地方實現狀態保持和恢復:

  ? 應用程序委托對象
  ? 視圖控制器
  ? 自定義視圖

  恢復標識是iOS ?為了實現UI狀態保持和恢復添加的設置項目。我們還需要在應用程序委托對象AppDelegate代碼部分做一些修改,添加的代碼如下:

-(BOOL) application:(UIApplication *)application shouldSaveApplicationState: (NSCoder *)coder { return YES; } -(BOOL) application:(UIApplication *)application shouldRestoreApplicationState: (NSCoder *)coder { return YES; } - (void)application:(UIApplication *)application willEncodeRestorableStateWithCoder: (NSCoder *)coder { [coder encodeFloat:2.0 forKey:@"Version"]; } - (void)application:(UIApplication *)application didDecodeRestorableStateWithCoder: (NSCoder *)coder { float lastVer = [coder decodeFloatForKey:@"Version"]; NSLog(@"lastVer = %f",lastVer); }

 

其中application:shouldSaveApplicationState:方法在應用退出時調用,負責控制是否允許保存狀態,返回YES 情況是可以保存,NO是不保存。
  application:shouldRestoreApplicationState:方法在應用啟動時調用,負責控制是否恢復上次退出時的狀態,返回YES 表示可以恢復,返回NO表示不可以恢復。
  application:willEncodeRestorableStateWithCoder:方法在保存時調用,在這個方法中實現UI狀態或數據的保存,其中[coder encodeFloat:2.0 forKey:@"Version"] 語句是保存簡單數據。
  application:didDecodeRestorableStateWithCoder:方法在恢復時調用,在這個方法中實現UI狀態或數據的恢復,其中[coder decodeFloatForKey:@"Version"] 語句用于恢復上次保存的數據。
  想要實現具體界面中控件的保持和恢復,還需要在它的視圖控制器中添加一些代碼。我們在ViewController.m中添加的代碼如下:

-(void)encodeRestorableStateWithCoder:(NSCoder *)coder { [super encodeRestorableStateWithCoder:coder]; [coder encodeObject:self.txtField.text forKey:kSaveKey]; } -(void)decodeRestorableStateWithCoder:(NSCoder *)coder { [super decodeRestorableStateWithCoder:coder]; self.txtField.text = [coder decodeObjectForKey:kSaveKey]; }

  在iOS 6之后,視圖控制器都添加了兩個方法——encodeRestorableStateWithCoder: 和decodeRestorableStateWithCoder: ,用來實現該控制器中的控件或數據的保存和恢復。其中encodeRestorableStateWithCoder:方法在保存時候調用,[coder encodeObject:self. txtField.textforKey:kSaveKey]語句是按照指定的鍵保存文本框的內容,decodeRestorableStateWithCoder:方法在恢復時調用,[coder decodeObjectForKey:kSaveKey]在恢復文本框內容時調用,保存和恢復事實上就是向一個歸檔文件中編碼和解碼的過程。

 

?

轉載于:https://www.cnblogs.com/chars/p/4993040.html

總結

以上是生活随笔為你收集整理的iOS视图生命周期的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。