美文网首页
控制器的初始化

控制器的初始化

作者: Leon1024 | 来源:发表于2019-03-14 00:23 被阅读0次

    一、初始化方法

        // 1.代码初始化
        ViewController *VCA = [[ViewController alloc] init];
        // 2.代码初始化,根据xib名字,从xib加载创建
        ViewController *VCB = [[ViewController alloc] initWithNibName:@"ViewController" bundle:[NSBundle mainBundle]];
        // 3.代码初始化,根据标识符字符串,从UIStoryboard加载创建
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
        ViewController *VCC = [storyboard instantiateViewControllerWithIdentifier:@"viewControllerIdentifier"];
        // 4.直接从 UIStoryboard 中拉线跳转,UIStoryboard进行自动管理
    

    以上四种方法初始化控制器时。
    第一种: init 方法默认会调用 initWithNibName: bundle: 方法。
    第二种:initWithNibName: bundle: 只调用自己,不调用 init。
    第三、四种: 故事版初始化方法,只调用控制器的 initWithCoder: 方法。

    另外:

    如果故事板中的控制器,它里面的某个子view,在其它地方被初始化时,会将这个控制器初始化一次。

    二、控制器中的View

    控制器自身的的view在控制器初始化的时候,是不存在的。它会在控制器的生命周期到了- (void)loadView 的时候才创建。故事板或xib中都没有对应的view时,会自动创建一个空view作为自身的view。
    需要注意的是:如果需要在 - (void)loadView 方法中重写自定义view,不能调用 [super loadView] 父类方法。

    三、生命周期

    1、 - (void)loadView

    加载自身的view。但子视图还未被加载。

    2、- (void)viewDidLoad

    加载好自身的view,自身的frame已确定,并且子视图也已经被初始化了,但还未进行子视图的布局,所以子视图的frame还未按约束进行布局计算。不要在这里获取子视图的frame数值。

    3、 - (void)viewWillAppear:

    视图将要显示,此方法会在控制器被切换或其它原因由消失到显示时调用。常用于配置导航栏等,或需要显示就刷新的方法。此时还未布局子视图。

    4、 - (void)viewWillLayoutSubviews

    将要对子视图进行布局,会调用多次。这里可以对将要进行的布局,进行计算和设置。但不要获取子视图的frame,还没布局好。

    5、- (void)viewDidLayoutSubviews

    子视图已经根据约束等布局完毕,可以获取按用户设定的正确的子视图参数。会多次调用。这里可以根据需要,随时调整子视图的关系。

    6、- (void)viewDidAppear:

    此时已经布局好,显示到手机屏幕上了。此方法内、后的操作,会被用户看到视图变化。

    7、- (void)viewWillDisappear:

    控制器将要消失,但还未消失。

    8、- (void)viewDidDisappear:

    视图已消失。

    9、- (void)dealloc

    控制器销毁。别在这里做太多涉及到此控制器的事情。

    控制器专场时,命令pop出后,第一步会先异步执行- (void)viewWillDisappear:。接下来会调用上层控制器的- (void)viewWillAppear:。 再调用自身的 - (void)viewDidDisappear:。再上层控制器的- (void)viewDidAppear:。最后自身的- (void)dealloc销毁。都是异步主线程执行。

    四、其它注意

    当控制器刚被初始化时,在还未触发viewDidLoad时,其子控件还不存在。不要对它的子控件进行操作。操作应该在viewDidLoad后。

    相关文章

      网友评论

          本文标题:控制器的初始化

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