iOS ViewCotroller生命周期

参考文章:http://www.cnblogs.com/Piosa/archive/2012/02/22/2363258.html
参考文章:http://blog.csdn.net/wihing/article/details/7314702

生命周期

如上图所示:

加载循环:

  1. 程序请求了controller的view.
  2. Controller调用alloc创建对象,分配空间
  3. Controller调用init初始化(如果存在Storyboard会调用initWithCode)
  4. 如果view当前不在内存中,controller调用loadview函数。
    loadView 进行如下操作:

    • 如果你重载了这个函数,你应该自己创建必要的views并且将一个非nil值赋给view属性
    • 1、 如果你没有重载这个函数,默认实现会使用controller的nibName 和 nibBundle属性来尝试从nib文件加载view。
    • 2、如果没有找到nib文件,它尝试寻找一个与view controller类名匹配(viewControllerClassName.nib)的nib文件。
    • 3、如果没有可用的nib文件,那么它创建一个空的UIView作为它的view。
  5. controller 调用 viewDidLoad 方法来执行一些控件的加载(加载时一词,相对于编译时、运行时)任务.程序可以重载loadView 和 viewDidLoad来执行一些任务。

  6. viewWillAppear 视图将出现在屏幕之前,马上这个视图就会被展现在屏幕上了
  7. viewDidAppear 视图已在屏幕上渲染完成

卸载循环:

正常卸载
  1. viewWillDisappear 视图将被从屏幕上移除之前执行
  2. viewDidDisappear 视图已经被从屏幕上移除,用户看不到这个视图了
  3. dealloc 视图被销毁,此处需要对你在init和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通过[super viewDidUnload]。

view的Load和Unload不是成对调用的。

因为viewWillUnload和viewDidUnload这两个函数只在内存警告时被调用。
就算强制将viewController的view设为nil也不会触发。
如果viewController从创建到销毁期间都没有内存警告,那么这两个函数将始终不会被调用。

iOS6已将viewWillUnload和viewDidUnload废弃,原因是UIKit在内存警告的时候已经不会自动释放无用的视图。
详见 viewDidUnload 和 viewWillUnload 被废弃

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值