• 控制器的生命周期


    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可能会被调用多次。

  • 相关阅读:
    The lexer hack
    How Clang handles the type / variable name ambiguity of C/C++
    python
    基于asp.net + easyui框架,一步步学习easyui-datagrid——界面(一)
    程序员最该看的30本书---------------------------国外编辑推荐
    DirectX 学习经典参考书籍 电子书下载
    基于asp.net+ easyui框架,js提交图片,实现先上传图片再提交表单
    请问JAVA三层架构,持久层,业务层,表现层,都该怎么理解?和MVC三层模型有什么区别
    对java框架的几点认识
    J2EE入门必备
  • 原文地址:https://www.cnblogs.com/sjxjjx/p/5001626.html
Copyright © 2020-2023  润新知