BruceLee
DocumentDiscussion

导航

统计
 

在视图控制器对象,相应的视图中出现两个明显的周期管理:加载和卸载周期。

每当应用程序的某些部分要求查看控制器的视图对象的指针时,并且该对象在内存中当前没有,加载周期发生。视图控制器加载视图到内存并将其存储为指针,以供将来引用。

如果您的应用程序在将来的某个时刻接收内存不足警告,视图控制器可能随后尝试卸载该视图。 在卸载周期,视图控制器尝试释放自己的视图对象并且视图控制器返回到其初始不可见状态。 如果它能够释放视图,视图控制器就没有一个残留的视图对象,直到再次请求,此时加载周期的再次开始。
在加载和卸载周期期间,大部分加载和卸载工作是由视图控制器完成。 但是,如果您的视图控制器类存储了一些视图层次的引用或者在视图加载的时候需要执行一些额外的配置,您可以重写特定方法来执行任何额外任务。
加载周期期间发生的步骤如下:

1。 一些应用程序要求使用控制器中的视图属性。

2。 如果要使用的视图引用当前在内存中,视图控制器调用loadView方法。

3。loadView方法执行下列操作之一:

          如果你重写此方法,您的实现负责创建所有必需的视图属性并分配non-nil值。

          如果你不重写此方法,默认的实现使用视图控制器的xibName和xibBundle属性尝试从指定的nib文件加载视图。如果指定的xib文件没有找到,视图控制会找与视图控制器类的名称匹配的xib文件来加载。

          如果没有可用的xib文件,该方法创建一个空的UIView对象并将其分配给视图控制器的视图属性。

4。然后视图控制器调用viewDidLoad方法执行任何加载时需要做的其他任务。
下图是加载视图到内存

$_G1RFC35%L_)PFY]]M@LG5

在卸载周期发生步骤如下: 、

1。应用程序从系统中接收到内存不足的警告。

2。每个视图控制器调用didReceiveMemoryWarning方法:

          如果你重写此方法,您应该使用它来释放视图控制器的任何不再需要的自定义数据对象。 你不应该使用它来释放视图控制器的视图对象。 为了实现执行默认行为有时必须调用super方法。

          如果确定释放视图对象是安全的,那么缺省的实现也可以释放视图对象。

3。视图控制器调用viewDidUnload方法释放其视图。 您可以重写此方法来执行顺序的释放视图结构以及所需的任何额外的清理。
从内存卸载视图

}MGUE0[{TO7$APZX(S4J(8U

注意:在IOS3.0和以后,viewDidUnload方法是放任何相关的清理视图代码的首选地方。 你也有可能重写didReceiveMemoryWarning方法,在释放视图时释放临时缓存或其它私有的不再需要的数据。 如果你确实重写 didReceiveMemoryWarning,总是要调用supper方法给继承版本的方法一个释放视图的机会。ios2.2及更早版本中,必须使用didReceiveMemoryWarning方法来执行视图的相关清理和释放任何不需要的私有数据。viewDidUnload方法只有在ios3.0及更高版本是可用的。

 

作者:Bruce Lee
出处:http://www.cnblogs.com/BruceLee521
本博原创文章版权归博客园和本人共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出作者名称和原文连接,否则保留追究法律责任的权利。 

posted on 2012-10-01 17:57 Bruce Lee 阅读(...) 评论(...) 编辑 收藏