iOS學習——ViewController(六)

         ViewController是iOS應用程序中重要的部分,是應用程序數據和視圖之間的重要橋樑,ViewController管理應用中的衆多視圖。 iOS的SDK中提供不少原生ViewController,以支持標準的用戶界面,例如表視圖控制器(UITableViewController)、導航控制器(UINavigationController)、標籤欄控制器(UITabbarController)和iPad專有的UISplitViewController等。html

 

        按結構能夠對iOS的全部ViewController分紅兩類:
        一、主要用於展現內容的ViewController,這種ViewController主要用於爲用戶展現內容,並與用戶交互,如UITableViewController,UIViewController。
        二、用於控制和顯示其餘ViewController的ViewController。這種ViewController通常都是一個ViewController的容器。如UINavigationController,UITabbarController。它們都有一個屬性:viewControllers。其中UINavigationController表示一種Stack式結構,push一個ViewController或pop一次,所以後一個ViewController通常會依賴前一個ViewController。而UITabbarController表示一個Array結構,各個ViewController是並列的。
android

 

 
 

 

 

ViewController使用

UIViewController可使用兩種方式建立,一、xib方式,二、代碼方式ios

        1)xib方式web

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

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文件拖拽幾個控件可看到效果。app

 

 

           2)代碼建立ide

       Command+N 新建文件UIViewController文件,在AppDelegate.m文件的didFinishLaunchingWithOptions方法中使用。在UIViewController的loadView方法中使用代碼建立view。
post

- (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;
}

 

 

            建立Viewui

- (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應用程序的生命週期,這裏會寫到ViewController的生命週期,這個更像Android的Activity的生命週期(見文章最後的圖)。ViewController生命週期會經歷初始化、加載視圖、銷燬視圖、生命結束等過程。

1)init方法

      初始化ViewController自己。

2)loadView方法

      當view須要被展現而它倒是nil時,viewController會調用該方法。

      若是代碼維護View的話須要重寫此方法,使用xib維護View的話不用重寫。

      

3)viewDidLoad方法

      執行完loadView後繼續執行viewDidLoad,loadView時尚未view,而viewDidLoad時view已經建立好了。

4)viewDidUnload方法

     當系統內存吃緊的時候會調用該方法,內存吃緊時,在iPhone OS 3.0以前didReceiveMemoryWarning是釋放無用內存的惟一方式,可是OS 3.0及之後viewDidUnload方法是更好的方式。

      在該方法中將全部IBOutlet(不管是property仍是實例變量)置爲nil(系統release view時已經將其release掉了)。

      在該方法中釋放其餘與view有關的對象、其餘在運行時建立(但非系統必須)的對象、在viewDidLoad中被建立的對象、緩存數據等。

      通常認爲viewDidUnload是viewDidLoad的鏡像,由於當view被從新請求時,viewDidLoad還會從新被執行。

5)dealloc

      釋放其餘資源或內存。


viewController的生命週期圖

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

1)loadView

ViewController卸載View過程見(unLoadView)

2)unLoadView

 

 

/**
* @author 張興業
*  http://blog.csdn.net/xyz_lmn
*  iOS入門羣: 83702688
*  android開發進階羣: 241395671
*  個人新浪微博: @張興業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

 

Activity生命週期

相關文章
相關標籤/搜索