1、init

Allocating critical data structures required by your view controller
不要出现创建view的代码。良好的设计,在init里应该只有相关数据的初始化,而且这些数据都是比较关键的数据。init里不要掉self.view,否则会导致viewcontroller创建view。(因为view是lazyinit的)。
2、loadView
Creating your view objects
只初始化view,一般用于创建比较关键的view如tableViewController的tabView,UINavigationController的navgationBar,不可掉用view的getter(在掉super loadView前),最好也不要初始化一些非关键的view。如果你是从nib文件中创建的viewController在这里一定要首先调用super的loadView方法,但建议不要重载这个方法。
3、viewDidLoad
Allocating or loading data to be displayed in your view
这时候view已经有了,最适合创建一些附加的view和控件了。有一点需要注意的是,viewDidLoad会调用多次(viewcontroller可能多次载入view,参见图2)。
4、viewWillAppear 这个一般在view被添加到superview之前,切换动画之前调用。在这里可以进行一些显示前的处理。比如键盘弹出,一些特殊的过程动画(比如状态条和navigationbar颜色)。
5、viewDidAppear 一般用于显示后,在切换动画后,如果有需要的操作,可以在这里加入相关代码。
6、viewDidUnload
Releasing references to view objects
Releasing data that is not needed when your view is not displayed
这时候viewController的view已经是nil了。由于这一般发生在内存警告时,所以在这里你应该将那些不在显示的view释放了。比如你在viewcontroller的view上加了一个label,而且这个label是viewcontroller的属性,那么你要把这个属性设置成nil,以免占用不必要的内存,而这个label在viewDidLoad时会重新创建。
7、dealloc
Releasing critical data structures required by your view controller
六、几点备注:
1、按结构可以对iOS的所有ViewController分成两类:
1)、主要用于展示内容的ViewController,这种ViewController主要用于为用户展示内容,并与用户交互,如UITableViewController,UIViewController。
2)、用于控制和显示其他ViewController的ViewController。这种ViewController一般都是一个ViewController的容器。如UINavigationController,UITabbarController。它们都有一个属性:viewControllers。其中UINavigationController表示一种Stack式结构,push一个ViewController或pop一次,因此后一个ViewController一般会依赖前一个ViewController。而UITabbarController表示一个Array结构,各个ViewController是并列的。
第一种ViewController会经常被继承,用来显示不同的数据给用户。而第二种很少被继承,除非你真的需要自定义它。
2、当view被添加其他view中之前时,会调用viewWillAppear,而之后会调用viewDidAppear。
当view从其他view中移出之前时,会调用viewWillDisAppear,而之后会调用viewDidDisappear。
当view不在使用,而且是disappeared,受到内存警告时,那么viewController会将view释放并将其指向nil。
3、由于Controller加载View时,会自动将一些View对象指向其对应的IBOutlet变量。
所以当view被卸载时我们必须在viewDidUnload将这些变量release掉,ViewController不会自动做这件事。
具体做法是将变量设置为空,(注意和dealloc中将变量release的区别)注意此时Controller的view属性是空的。

转载于:https://blog.51cto.com/520119/1411307

IOS 中视图控制器的生命周期相关推荐

  1. iOS中视图控制器指定自定义UIView

    他的好处就是在程序执行viewDIdLoad之前可以把我们需要用的数据加载完成.这也是减轻控制器的负担之一的办法.但是我个人觉得好是每有数据的延迟加载的功能牛.延迟加载只在数据需要的时候才被加载到视图 ...

  2. 【转】【iOS知识学习】_视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear等的区别及用途...

    原文网址:http://blog.csdn.net/weasleyqi/article/details/8090373 iOS视图控制对象生命周期-init.viewDidLoad.viewWillA ...

  3. iOS视图控制对象生命周期-init、viewDidLoad、viewWillAppear、v...

    2019独角兽企业重金招聘Python工程师标准>>> iOS视图控制对象生命周期-init.viewDidLoad.viewWillAppear.viewDidAppear.vie ...

  4. iOS视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear、view...

    iOS视图控制对象生命周期: init.viewDidLoad.viewWillAppear.viewDidAppear.viewWillDisappear.viewDidDisappear的区别及用 ...

  5. iOS开发UI篇—使用storyboard创建导航控制器以及控制器的生命周期

    一.基本过程 新建一个项目,系统默认的主控制器继承自UIViewController,把主控制器两个文件删掉. 在storyboard中,默认的控制器是View Controller,而我们需要的是导 ...

  6. _视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear等的区别及用途...

    iOS视图控制对象生命周期-init.viewDidLoad.viewWillAppear.viewDidAppear.viewWillDisappear.viewDidDisappear的区别及用途 ...

  7. 一劳永逸,iOS 网页视图控制器通用类封装

    原文链接:http://www.jianshu.com/p/553424763585 随着 H5 的发展,在 iOS 开发中,网页视图的使用率逐渐提升,为了增加代码封装度.减轻开发负担,因此通常会对网 ...

  8. Kubernetes 中数据包的生命周期 -- 第 3 部分

    本文翻译自:Life of a Packet in Kubernetes - Part 3 [1] 作者:Dinesh Kumar Ramasamy 本文在原文的基础上做了适当的修改,如有疑问请查阅原 ...

  9. 控制器view生命周期

    控制器View的生命周期方法:只要是控制器的生命周期方法,都是以view开头. 控制器View加载完成时调用 - (void)viewDidLoad { [super viewDidLoad]; } ...

最新文章

  1. eBay宣布发布全新的购买和销售APIs
  2. 监控利器Prometheus初探
  3. Android之 ListView滑动时不加载图片
  4. 提高Python运行效率的六个窍门
  5. [032] 微信公众帐号开发教程第8篇-文本消息中使用网页超链接(转)
  6. 《嵌入式Linux基础教程》补充阅读建议电子数目下载
  7. 计算机应用基础教程清华大学,清华大学出版社-图书详情-《大学计算机应用基础教程(第3版)》...
  8. 2021大学生创业计划书范例
  9. 高分七号卫星发射成功
  10. 知其然,不知其所以然
  11. HS300股指与其成分股的价格匹配
  12. mysql schemata_mysql8 参考手册-INFORMATION_SCHEMA SCHEMATA表
  13. SEO入门到精通只需学会这10个关键技巧
  14. 表格识别1-使用python-opencv实现表格识别
  15. Android Studio 实现九宫格
  16. warning: iteration xxxu invokes undefined behavior [-Waggressive-loop-optimizations]
  17. 单片机中动态数码管闪烁问题
  18. macOS卸载Karabiner-Elements
  19. python学习笔记(二)--深入了解python函数
  20. 突破NVIDIA NVENC并发Session数目限制

热门文章

  1. 3984: 玩具(toy)
  2. JavaSE基础知识(5)—面向对象(Object类)
  3. java数据库连接类,已经把数据库操作的方法都封装好了
  4. 黑马程序员-----内部类、匿名内部类应用
  5. C#Socket文件传输(发送与接收代码)
  6. Flutter的文本控件的基本使用
  7. linux root ssh 安全,linux ssh安全加固方法
  8. python 递归 写平方_Python算法:推导、递归和规约
  9. 标识人脸程序matlab,Matlab人脸识别基础源程序
  10. VLAN基础配置及Access接口