理解view的生命周期:
在UIViewController中,view(黑体的view指的是controller的view属性)有两个循环:加载和卸载循环。当程序的一部分向controller请求view的指针且view不在内存中时,view会进入加载循环,controller会将view加载入内存。
当程序接收到内存警告时,controller会尝试卸载view,在卸载循环中,controller尝试释放它的view对象并返回到原始的无view状态(当它不在屏幕上显示时,这个条件的判断到底是根据view的结构来还是根据用户视觉来,我尚不清楚),直到view下次被请求。
在加载卸载循环中,controller处理的大部分逻辑。但是如果我们的controller还“持有”着view的后代view时,或者还有其他后续操作需要进行时,我们可以重载特定函数(后面会介绍到)来另行处理。
加载循环:
程序请求了controller的view.
如果view当前不在内存中,controller调用loadview函数。
loadView 进行如下操作:
如果你重载了这个函数,你应该自己创建必要的views并且将一个非nil值赋给view属性
如果你没有重载这个函数,默认实现会使用controller的nibName 和 nibBundle属性来尝试从nib文件加载view。如果没有找到nib文件,它尝试寻找一个与view controller类名匹配(viewControllerClassName.nib)的nib文件。
如果没有可用的nib文件,那么它创建一个空的UIView作为它的view。
controller 调用 viewDidLoad 方法来执行一些加载时(加载时一词,相对于编译时、运行时)任务.
程序可以重载loadView 和 viewDidLoad来执行一些任务:
卸载循环:
程序收到内存警告.
每个view controller调用 didReceiveMemoryWarning:
If you override this method, you should use it to release any custom data that your view controller object no longer needs. You should not use it to release your view controller’s view. You must call super at some point in your implementation to perform the default behavior.(iOS3.0以后不建议重载这个函数来进行额外的清除操作,使用viewDidUnload)
默认实现会在确定可以安全地释放view时释放掉view。
如果controller释放了它的view, 它会调用 viewDidUnload. .可以重载这个函数来进行额外的清理操作(不要清除view和那些加载循环中无法rebuild的数据)。
原文地址:
http://www.cnblogs.com/Piosa/archive/2012/02/22/2363258.html
分享到:
相关推荐
UIViewController生命周期详解及方法调用
UIViewController是IOS程序中的一个重要组成部分,下面这篇文章主要给大家介绍了关于iOS开发教程之UIView和UIViewController的生命周期的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
UIViewController添加多个UIViewController。可以把UIViewController的View当作容器,让其他UIViewController添加进该View,并可以在多个UIViewController间切换。
一、引言 作为MVC设计模式中的C,Controller一直扮演着项目...这里旨在讨论UIViewController的生命周期和属性方法,在最基础的东西上,往往会得到意想不到的惊喜。 二、UIViewController的生命周期 要了解UIViewContr
UIViewController+Present,这个分类是用来适配iOS13之后UIViewController模态弹出问题的. 使用这种方式就不用去项目中挨个找模态弹出了.
UIViewController Demo源代码 创建带nib和不带nib文件
在StoryBoard动态加入UIViewController 我们先创建一个Tabbed Aplicaiton,这里包含两个viewController,一个first view controller ,一个second view controller ,我们想动态的创建第三个viewController , 即一点...
:fishing_pole: 生命周期挂钩 :fishing_pole:关于LifecycleHooks允许将自定义代码注入到视图和视图控制器中,以响应生命周期事件,例如, viewController.on(.viewDidAppear) { animated inprint("View did appear",...
AICustomViewControllerTransition, 为iOS创建定制UIViewController转换的简单而简洁的方法 AICustomViewControllerTransition为iOS创建定制UIViewController转换的简单而简洁的方法没有限制,也没有实现...
10.UIViewController 的生命周期?可以参考一下这篇文章。
UIViewController学习 并且带有实例
自己写了一个Dome 实现了UIView或者时UIViewController 缩放动画效果
iOS 多个UIViewController之间滑动切换
Mehod Swizzling 实现页面统计
主要介绍了iOS开发中的UIViewController,其中以UIViewController作为着重讲解,需要的朋友可以参考下
GTSheet 一个易于集成的解决方案,用于在底部sheet中呈现UIViewController
使用runtime机制,隐藏iOS导航栏返回按钮标题的文字,并不会有其他的隐患。
iOS5 UIViewController 新特性 UIViewController的切换
IOS弹出自定义UIViewControllerIOS弹出自定义UIViewController