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

    UIViewController是视图和数据的桥梁,UIViewController是所有controller的基类,ios内置了很多试图控制器,如导航控制器,tableViewController等。

    视图控制本身包含一个视图,是view。UIScreen是连接物理屏幕的标示,UIWindow是为UIScreen提供了一个画布。

    加载过程分为以下几步:

    第一、从xib文件中创建:- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

    sample:

    self.viewController = [[[AndyViewControlleralloc]initWithNibName:@"AndyViewController"bundle:nil]autorelease];

    说明:

    如果对象是UIViewController的子类,那么必定会调用该函数,init函数在初始化过程中也会调用此函数,如果文件中没有xib,那么初始化调用完此函数后,view仍然回空,这个时候调用view的set方法发现,view为空,就会自动调用loadView方法初始化一个emptyView,如果子类重写了该方法,那么就会调用子类的该方法,但是子类重写时必须self.view 复制,否则view将为空,接下来调用viewDidLoad方法。

    第二、loadView方法

    当view需要被展示而它却是nil时,viewController会调用该方法。不要直接调用该方法。
    如果手工维护views,必须重载重写该方法
    如果使用IB维护views,必须不能重载重写该方法
    loadView和IB构建view
    作用:在需要用程序自定义view时重新,其他情况可以不用考虑

    第三、(void)viewDidLoad

    在调用完loadView方法后,调用此方法,重写该方法可以进一步定制view,

    一般情况下,数据对象是通过配置view controller的属性来提供的,view controller需要的一些额外的数据应该通过重写viewDidLoad函数来提供。

    但是如果此时view没有创建好,使用self.view时会重新调用loadView方法,这样导致死循环。

    实例代码如下:

    -(void)loadView
    {
        NSLog(@"loadView");
    //    UIView *view=[[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame];
    //    view.backgroundColor=[UIColor greenColor];
    //    self.view=view;
    //    [view release];
        
        //添加子视图
    }
    - (void)viewDidLoad
    {
        [super viewDidLoad];
         UIView *view=[[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame];
            view.backgroundColor=[UIColor greenColor];
        [self.view addSubview:view];
          [view release];
    
        
        NSLog(@"view Did Load");
        //注意上面的操作会判断view是否为空,如果view为空,就会调用loadview方法
    	// Do any additional setup after loading the view.
    }
    


    第四、- (void)viewWillAppear:(BOOL)animated;    // Called when the view is about to made visible. Default does nothing
    第五、- (void)viewDidAppear:(BOOL)animated;     // Called when the view has been fully transitioned onto the screen. Default does nothing


  • 相关阅读:
    Megcup 2017 决赛第一题 规则
    折正方体-------------给你出道题
    论公平
    Vue 将一个组件嵌入到另一个组件中
    Vue下的index.html
    Vue下的package.json
    Vue 一些用法
    chkconfig 系统服务管理
    Windows和Linux下的 telnet命令 不是内部或外部命令的解决方案
    JSONPlaceholder
  • 原文地址:https://www.cnblogs.com/james1207/p/3299666.html
Copyright © 2011-2022 走看看