溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

iOS學(xué)習(xí)——ViewController(六)

發(fā)布時間:2020-07-18 17:22:53 來源:網(wǎng)絡(luò) 閱讀:363 作者:xyz_lmn 欄目:移動開發(fā)
         ViewController是iOS應(yīng)用程序中重要的部分,是應(yīng)用程序數(shù)據(jù)和視圖之間的重要橋梁,ViewController管理應(yīng)用中的眾多視圖。iOS的SDK中提供很多原生ViewController,以支持標(biāo)準(zhǔn)的用戶界面,例如表視圖控制器(UITableViewController)、導(dǎo)航控制器(UINavigationController)、標(biāo)簽欄控制器(UITabbarController)和iPad專有的UISplitViewController等。


        按結(jié)構(gòu)可以對iOS的所有ViewController分成兩類:
        1、主要用于展示內(nèi)容的ViewController,這種ViewController主要用于為用戶展示內(nèi)容,并與用戶交互,如UITableViewController,UIViewController。
        2、用于控制和顯示其他ViewController的ViewController。這種ViewController一般都是一個ViewController的容器。如UINavigationController,UITabbarController。它們都有一個屬性:viewControllers。其中UINavigationController表示一種Stack式結(jié)構(gòu),push一個ViewController或pop一次,因此后一個ViewController一般會依賴前一個ViewController。而UITabbarController表示一個Array結(jié)構(gòu),各個ViewController是并列的。

ViewController使用

UIViewController可以使用兩種方式創(chuàng)建,1、xib方式,2、代碼方式

        1)xib方式

        Command+N 新建文件,選Cocoa Touch UIViewController subclass,SubClass of UIViewController,勾選with XIB for user interface。定義ViewController名字是MainViewController,最終生成MainViewController.h MainViewController.m MainViewController.xib三個文件。在AppDelegate.m文件的

didFinishLaunchingWithOptions方法中加載xib文件。


    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];     // Override point for customization after application launch.     self.window.backgroundColor = [UIColor whiteColor];          MainUIViewController *vc=[[MainUIViewController alloc]initWithNibName:@"MainUIViewController" bundle:nil];     self.window.rootViewController=vc;          [self.window makeKeyAndVisible];     return YES; 

        加載xib文件后,在xib文件拖拽幾個控件可看到效果。


           2)代碼創(chuàng)建

       Command+N 新建文件UIViewController文件,在AppDelegate.m文件的didFinishLaunchingWithOptions方法中使用。在UIViewController的loadView方法中使用代碼創(chuàng)建view。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {     self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];     // Override point for customization after application launch.     self.window.backgroundColor = [UIColor whiteColor];      //    MainUIViewController *vc=[[MainUIViewController alloc]initWithNibName:@"MainUIViewController" bundle:nil]; //    self.window.rootViewController=vc;          RootViewController *rc=[[RootViewController alloc] init];     self.window.rootViewController=rc;          [self.window makeKeyAndVisible];     return YES; }

            創(chuàng)建View

- (void)loadView{     [super loadView];          UIView *view=[[UIView alloc]initWithFrame:[UIScreen mainScreen].applicationFrame];     view.alpha=0.5;     view.backgroundColor=[UIColor cyanColor];     self.view=view;  }


ViewController的生命周期

       前面寫了iOS應(yīng)用程序的生命周期,這里會寫到ViewController的生命周期,這個更像Android的Activity的生命周期(見文章最后的圖)。ViewController生命周期會經(jīng)歷初始化、加載視圖、銷毀視圖、生命結(jié)束等過程。

1)init方法

      初始化ViewController本身。

2)loadView方法

      當(dāng)view需要被展示而它卻是nil時,viewController會調(diào)用該方法。

      如果代碼維護(hù)View的話需要重寫此方法,使用xib維護(hù)View的話不用重寫。

      

3)viewDidLoad方法

      執(zhí)行完loadView后繼續(xù)執(zhí)行viewDidLoad,loadView時還沒有view,而viewDidLoad時view已經(jīng)創(chuàng)建好了。

4)viewDidUnload方法

     當(dāng)系統(tǒng)內(nèi)存吃緊的時候會調(diào)用該方法,內(nèi)存吃緊時,在iPhone OS 3.0之前didReceiveMemoryWarning是釋放無用內(nèi)存的唯一方式,但是OS 3.0及以后viewDidUnload方法是更好的方式。

      在該方法中將所有IBOutlet(無論是property還是實例變量)置為nil(系統(tǒng)release view時已經(jīng)將其release掉了)。

      在該方法中釋放其他與view有關(guān)的對象、其他在運行時創(chuàng)建(但非系統(tǒng)必須)的對象、在viewDidLoad中被創(chuàng)建的對象、緩存數(shù)據(jù)等。

      一般認(rèn)為viewDidUnload是viewDidLoad的鏡像,因為當(dāng)view被重新請求時,viewDidLoad還會重新被執(zhí)行。

5)dealloc

      釋放其他資源或內(nèi)存。

iOS學(xué)習(xí)——ViewController(六)

viewController的生命周期圖

ViewController加載view過程,見下圖(loadView)

1)loadView

iOS學(xué)習(xí)——ViewController(六)

ViewController卸載View過程見(unLoadView)

2)unLoadView


iOS學(xué)習(xí)——ViewController(六)

/**
* @author 張興業(yè)
*  http://blog.csdn.net/xyz_lmn
*  iOS入門群:83702688
*  android開發(fā)進(jìn)階群:241395671
*  我的新浪微博:@張興業(yè)TBOW
*/


參考:

https://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/Introduction/Introduction.html#//apple_ref/doc/uid/TP40007457-CH1-SW1

http://xcodev.com/341.html

http://iostrack.com/post/2012-07-20/40029700941


iOS學(xué)習(xí)——ViewController(六)

Activity生命周期


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI