iOS UIViewController生命周期控制
具体流程,看下图:
init方法
在init方法中实例化必要的对象(遵从LazyLoad思想)
init方法中初始化ViewController本身
loadView方法
当view需要被展示而它却是nil时,viewController会调用该方法。不要直接调用该方法。
如果手工维护views,必须重写该方法。
如果使用IB维护views,必须不能重写该方法。
loadView和IB构建view
viewDidLoad方法
重写该方法以进一步定制view。
viewDidLoad后调用数据Model。
viewDidUnload方法
当系统内存吃紧的时候会调用该方法(注:viewController没有被dealloc)。
内存吃紧时,在iPhone OS 3.0之前didReceiveMemoryWarning是释放无用内存的唯一方式,但是OS 3.0及以后viewDidUnload方法是更好的方式。
在该方法中将所有IBOutlet(无论是property还是实例变量)置为nil(系统release view时已经将其release掉了)。
在该方法中释放其他与view有关的对象、其他在运行时创建(但非系统必须)的对象、在viewDidLoad中被创建的对象、缓存数据等。
release对象后,将对象置为nil(IBOutlet只需要将其置为nil,系统release view时已经将其release掉了)。
一般认为viewDidUnload是viewDidLoad的镜像,因为当view被重新请求时,viewDidLoad还会重新被执行。
viewDidUnload中被release的对象必须是很容易被重新创建的对象(比如在viewDidLoad或其他方法中创建的对象),不要release用户数据或其他很难被重新创建的对象。
dealloc方法
viewDidUnload和dealloc方法没有关联,dealloc还是继续做它该做的事情。
最新文章
- Dockerfile初探
- GTD工具 Wunderlist使用心得总结
- 大前端学习笔记整理【六】this关键字详解
- 由Nullable模式想到的ToString的扩展
- Spring Boot 集成MyBatis
- HDU2824 The Euler function(欧拉函数)
- C# 小规模查找集合性能测试
- spring data redis RedisTemplate操作redis相关用法
- 用grunt搭建自动化的web前端开发环境-完整教程
- Delphi XE6调用javascript
- Thymeleaf模板的使用
- cocos2dx触屏响应(单点触摸)CCTouchBegan,CCTouchMove,CCTouchEnd
- HDU 4508 沼泽湿地系列故事——记住减肥I (2013腾讯编程马拉松预赛第一)
- nova-compute[5410]: OSError: [Errno 13] Permission denied: &;#39;图像路径&;#39;
- html页面显示服务器时间
- 视频编辑SDK---我们只提供API,任你自由设计炫酷的功能
- #云栖大会# 移动安全专场——APP加固新方向(演讲速记)
- Web服务器、应用服务器、Web容器、反向代理服务器区别与联系
- 解决 Can't Connect to MySQL Server on IPAddress (10061) 的问题
- [UE4]VR手柄按键参考
热门文章
- 体验 PHP under .NET Core
- 恢复制作了系统盘的U盘
- Oracle DBLINK 简单使用
- Django:模板template(二)
- OC变量限定符和属性限定符
- linux虚拟机设置本地yum源
- [development][security][modsecurity][nginx] nginx / modsecurity development things
- Copycat - CopycatServer
- html5页面自适应移动端
- 【python基础】os.path模块常用方法详解