• 控制器的生命周期


    1>  概念:控制器的view的生命周期方法都是以view开头的。

    2>  控制器view的加载

    计算机生成了可选文字:
view property 
is accessed 
NO 
Is there 
loadView 
a view? 
Custom 
Method? 
YES 
Storyboard 
load from 
empty view 
storyboard 
viewDidLoad 
return view 
YES 
custom method 
View Controller 
view 
View Controller 
view 
nil 
View

            当控制器要加载一个view时,首先判断是否已有view,如果有,则直接return;如果没有,则调用loadView方法(参考下面第3点);

    3>  控制器的view的创建(调用loadView方法时)

    计算机生成了可选文字:
MJViewControllerffJview$JÉlJa 
NO 
loadView 
YES 
storyboard 
NO 
n ibName 
NO 
MJView.xib 
NO 
MJViewContr011er.xib 
NO 
YES 
YES 
YES 
iew. 
YES 
MJViewController.

            当创建view的时候,首先看我们有没有自定义loadView,如果重写了loadView方法,就根据loadView的代码实现去创建,如果没有自定义loadView,就看有没有storyboard文件;

            如果有storyboard,那么就根据storyboard的描述去创建,如果没有storyboard,就看有没有跟代码中输入的nibName同名的xib文件;

            如果有找到nibName代码输入的xib文件,就根据nibName对应的xib的描述去创建,如果没有找到nibName中的xib文件,就看有没有跟控制器类名同名且不带controllerview.xib文件;

            如果有跟控制器类名同名且不带controllerview.xib文件,就根据view.xib的描述去创建,如果没有,就看有没有跟控制器类名同名的viewController.xib文件;

            如果有跟控制器类名同名的viewController.xib文件,就根据viewController.xib的描述去创建,如果没有,就创建一个空的view

    注意点:

    • 控制器的view是延迟加载的:用到时再加载
    • 可以用isViewLoaded方法判断一个UIViewController的view是否已经被加载
    • 控制器的view加载完毕就会调用viewDidLoad方法
    • 当通过代码方式去创建view时,在loadView方法中不应该调用super,如果调用[super  loadView]会影响性能;使用创建的viewself.view进行赋值

    4>  内存警告处理

    计算机生成了可选文字:
Memory warning 
did ReceiveMemo ryWa rn ing 
YES 
Is there 
a view? 
Can it be 
released? 
YES 
viewWil IUnLoad 
release the view 
viewDidUnLoad 
View Controller 
view 
outlet 
View Controller 
view 
outlet 
View Controller 
view 
outlet 
View 
Subview 
nil 
Subview 
nil 
nil

            当系统发出内存警告时,会调用didReceiveMemoryWarning方法,如果当前有能被释放的view,系统会调用viewWillUnload方法来释放view,完成后调用viewDidUnload方法,完成viewrelease

    5>  生命周期执行流程:

    Init -> loadView -> viewDidLoad -> viewWillAppear -> viewWillLayoutSubviews -> viewDidLayoutSubviews -> viewDidAppear -> viewWillDisappear -> viewDidDisappear -> viewWillUnload -> viewDidUnload -> dealloc

    注:在非ARCviewDidUnload,经常用来清空界面上的数据

    6>  小结

    loadViewviewDidLoad的区别:

            loadView 方法在控制器的 view 为 nil 的时候被调用。 此方法用于以编程的方式创建 view 的时候用到。loadView 是使用代码生成视图的时候,当视图第一次载入的时候调用的方法。用于使用(写)代码来实现控件。loadView只会被调用一次。

            viewDidLoad 方法只有当 view 从 nib 文件初始化的时候才被调用。 viewDidLoad 用于初始化,加载时用到。viewDidLoad可能会被调用多次。

  • 相关阅读:
    20172311-ASL测试 2018-1938872补充博客
    20172311《程序设计与数据结构》第四周学习总结
    20172311 实验一《程序设计与数据结构》线性结构 实验报告
    20172311《程序设计与数据结构》第三周学习总结
    20172311《程序设计与数据结构》第二周学习总结
    20172311《程序设计与数据结构》第一周学习总结
    20172311 《程序设计与数据结构》(上)课程总结
    20172311 2017-2018-2 《程序设计与数据结构》实验五报告
    20172311 2017-2018-2 《程序设计与数据结构》第十一周学习总结
    20172323 2018-2019-1 《程序设计与数据结构》课堂作业报告
  • 原文地址:https://www.cnblogs.com/sjxjjx/p/5001626.html
Copyright © 2020-2023  润新知