zoukankan      html  css  js  c++  java
  • UIViewController加载过程

     ViewController是iOS应用程序中重要的部分,是应用程序数据和视图之间的重要桥梁,ViewController管理应用中的众多视图。iOS的SDK中提供很多原生ViewController,以支持标准的用户界面,例如表视图控制器(UITableViewController)、导航控制器(UINavigationController)、标签栏控制器(UITabbarController)和iPad专有的UISplitViewController等。

     

            按结构可以对iOS的所有ViewController分成两类:
            1、主要用于展示内容的ViewController,这种ViewController主要用于为用户展示内容,并与用户交互,如UITableViewController,UIViewController。
            2、用于控制和显示其他ViewController的ViewController。这种ViewController一般都是一个 ViewController的容器。如UINavigationController,UITabbarController。它们都有一个属 性:viewControllers。其中UINavigationController表示一种Stack式结构,push一个 ViewController或pop一次,因此后一个ViewController一般会依赖前一个ViewController。而 UITabbarController表示一个Array结构,各个ViewController是并列的。

     

    ViewController使用

    UIViewController可以使用两种方式创建,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)代码创建

           Command+N 新建文件UIViewController文件,在AppDelegate.m文件的didFinishLaunchingWithOptions方法中使用。在UIViewController的loadView方法中使用代码创建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;
    }

                创建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应用程序的生命周期,这里会写到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

  • 相关阅读:
    查看端口有没有被占用
    微信公众号2()
    How to insert a segment of noise to music file
    puppet practice
    Docker Commands
    LempelZiv algorithm realization
    The algorithm of entropy realization
    Java network programmingguessing game
    Deploy Openstack with RDO and Change VNC console to Spice
    puppet overview
  • 原文地址:https://www.cnblogs.com/cdp-snail/p/4947526.html
Copyright © 2011-2022 走看看