当前位置: 首页 > 操作系统 > 手机系统 > 正文

IOS中UIView的生命周期

时间:2014-03-18 RannieR

UIView对象一般都是由alloc和init方法创建的,由UIViewController进行维护和管理。一般需要完 成的任务有:创建视图,显示视图,隐藏视图和释放视图。

一般视图不会在程序运行时立刻创建 并载入,只有当应用需要这个视图的时候才会创建,这种延迟创建视图的方法能够提高内存的使用效率 。同样,在需要这个视图之前,系统会检查是不是已经载入过这个视图,如果是,直接返回创建过的 view,如果没有,则开始创建过程

- (void)loadView

载入视图过程中执行代码

- (void)viewDidLoad

视图载入完成需要执行的代码

- (void)viewDidUnload

卸载视图代 码

一个视图切换到另一个视图的时候,之前那个视图并不会被清除,还会留在内存中等待系统调 用,所以一个视图在使用到卸载过程中虽然可能多次出现,但是只会载入一次,也就是调用一次 loadView和viewDidLoad方法。

在IOS6以前,在系统接收到Memory Warning时,会调用 viewDidUnload这个方法,对视图进行卸载清空。但是IOS6以后这个方法已经不再被使用了,文档里是这 么描述的

这里给出的解释是, 视图不再在低内存的情况下被清除了。苹果公司WWDC2012对这个方法的告别陈述

The method viewWillUnload and viewDidUnload. We’re not going to call them anymore. I mean, there’s kind of a cost-benifit equation and analysis that we went through. In the early days, there was a real performance need for us to ensure that on memory warnings we unloaded views. There was all kinds of graphics and backing stores and so forth that would also get unloaded. We now unload those independently of the view, so it isn’t that big of a deal for us for those to be unloaded, and there were so many bugs where there would be pointers into。

具体为什么不需要清空view呢,下面解释了原因(摘自唐巧的《再见,viewDidUnload方法》 )

1.UIView有一个CALayer的成员变量,CALayer是具体用于将自己画到屏幕上的。如下图所示: