美文网首页
IOS UIViewController控制器生命周期

IOS UIViewController控制器生命周期

作者: 你duck不必呀 | 来源:发表于2019-04-29 15:12 被阅读0次

    IOS 控制器的生命周期
    + (void)load
    项目启动就会调用,系统自动加载的,并且自始至终只会调用一次
    调用顺序:父类的->子类的->分类
    不需要调用[super load]

    + (void)load{
        //[super load];不需要
        NSLog(@"%s",__FUNCTION__);
    }
    

    + (void)initialize;
    这个类在第一次被初始化前调用,如果这个类没被用到,就不会调用。被多次使用也会被调用多次。
    调用顺序:父类->子类(分类重写会覆盖主类)
    不需要调用[super initialize];

    + (void)initialize{
        NSLog(@"%s",__FUNCTION__);
    }
    

    -(void)loadView第一次加载控制器的view(self.view==nil)会调用,具体是这样
    1.它会先去找和控制器相关联的xib文件,加载xib文件来创建控制器的view
    2.如果没有xib文件,如果调用了[super loadView ]就会创建一个空白的UIView,然后赋值给控制器的view
    3.如果没用xib,重写loadView里面不调用[super loadView ],这个方法会持续调用,直到栈溢出。
    所以使用的时候,分情况;
    如果有xib,loadView里面不用调用[super loadView ]
    如果没有xib,用默认实现(不重写loadView)
    如果没有xib,重写了loadView 要调用[super loadView ]

    -(void)loadView{
        NSLog(@"%s",__FUNCTION__);
    }
    

    - (void)viewDidLoad加载完视图时调用,有自定义视图控件可以写在这里

    - (void)viewDidLoad {
        [super viewDidLoad];
        NSLog(@"%s",__FUNCTION__);
    }
    

    - (void)viewWillAppear:(BOOL)animated//视图将要显示时调用

    - (void)viewWillAppear:(BOOL)animated{
        [superviewWillAppear:animated];
        NSLog(@"%s",__FUNCTION__);
    }
    

    -(void)viewDidAppear:(BOOL)animated视图已经出现时调用

    -(void)viewDidAppear:(BOOL)animated{
        [superviewDidAppear:animated];
        NSLog(@"%s",__FUNCTION__);
    }
    

    -(void)viewWillDisappear:(BOOL)animated将要切换,消失之前调用

    -(void)viewWillDisappear:(BOOL)animated{
        [super viewWillDisappear:animated];
        NSLog(@"%s",__FUNCTION__);
    }
    

    - (void)viewDidDisappear:(BOOL)animated已经切换,消失了调用

    - (void)viewDidDisappear:(BOOL)animated{
        [superviewDidDisappear:animated];
        NSLog(@"%s",__FUNCTION__);
    }
    

    - (void)viewWillLayoutSubviews将要布局子控件时候调用

    - (void)viewWillLayoutSubviews{
        [super viewWillLayoutSubviews];
        NSLog(@"%s",__FUNCTION__);
    }
    

    - (void)viewDidLayoutSubviews布局完成时调用

    - (void)viewDidLayoutSubviews{
        [super viewDidLayoutSubviews];
        NSLog(@"%s",__FUNCTION__);
    }
    

    调用结果如下:

    2019-01-07 11:11:46.008646+0800 IOS-控制器生命周期[1533:41536] +[ViewController load]
    2019-01-07 11:11:46.214454+0800 IOS-控制器生命周期[1533:41536] +[ViewController initialize]
    2019-01-07 11:11:46.218574+0800 IOS-控制器生命周期[1533:41536] -[ViewController loadView]
    2019-01-07 11:11:46.219022+0800 IOS-控制器生命周期[1533:41536] -[ViewController viewDidLoad]
    2019-01-07 11:11:46.219256+0800 IOS-控制器生命周期[1533:41536] -[ViewController viewWillAppear:]
    2019-01-07 11:11:46.221869+0800 IOS-控制器生命周期[1533:41536] -[ViewController viewWillLayoutSubviews]
    2019-01-07 11:11:46.222021+0800 IOS-控制器生命周期[1533:41536] -[ViewController viewDidLayoutSubviews]
    2019-01-07 11:11:46.223532+0800 IOS-控制器生命周期[1533:41536] -[ViewController viewDidAppear:]
    

    相关文章

      网友评论

          本文标题:IOS UIViewController控制器生命周期

          本文链接:https://www.haomeiwen.com/subject/bteynqtx.html