关闭

iphone 程序view的流程

243人阅读 评论(0) 收藏 举报

from:http://www.cocoachina.com/bbs/read.php?tid=38766&page=3


由init、loadView、viewDidLoad、viewDidUnload、dealloc的关系说起
 init方法
  在init方法中实例化必要的对象(遵从LazyLoad思想)
‍  init方法中初始化ViewController本身
 loadView方法
  当view需要被展示而它却是nil时,viewController会调用该方法。不要直接调用该方法。
  如果手工维护views,必须重载重写该方法
  如果使用IB维护views,必须不能重载重写该方法
 loadView和IB构建view
  你在控制器中实现了loadView方法,那么你可能会在应用运行的某个时候被内存管理控制调用。 如果设备内存不足的时候, view 控制器会收到didReceiveMemoryWarning的消息。 默认的实现是检查当前控制器的view是否在使用。 如果它的view不在当前正在使用的view hierarchy里面,且你的控制器实现了loadView方法,那么这个view将被release, loadView方法将被再次调用来创建一个新的view。
 viewDidLoad方法
  viewDidLoad 此方法只有当view从nib文件初始化的时候才被调用。
  重载重写该方法以进一步定制view
  在iPhone OS 3.0及之后的版本中,还应该重载重写viewDidUnload来释放对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还是继续做它该做的事情。

文章二:
  viewDidUnload
该方法在收到内存警告,同时该视图并不在当前界面显示时候会被调用,此时该 controller 的 view 已经被释放并赋值为 nil。
接下来你要做的是
把实例变量的子视图释放(IBOulet 的,以及自己添加的)
其他实例变量,比如之前在 -viewDidLoaded 中实例的数据数组、http 请求释放掉
    因为当该 viewController 再次被激活准备显示时(比如 navigationControler 返回到上一级),vc 发现自己的 view 为空后会重复之前的流程直到把 view 给创建起来。若没将自己额外添加的子视图,各种类实例变量释放,这里便会重新再次创建

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:212225次
    • 积分:2583
    • 等级:
    • 排名:第14128名
    • 原创:19篇
    • 转载:223篇
    • 译文:0篇
    • 评论:15条
    最新评论