构建 View 时可能用到的代理函数调用顺序

转载 2012年03月22日 11:23:32


在 iOS3.0 后,UIViewController 多了一个叫做 viewDidUnLoad 的方法。不少人都不清楚这个方法的具体意义,苹果的文档也就一句 ”Called when the controller’s view is released from memory” 简单的解释了下,并要求你把 IBOutlet 绑定的视图给清空,为什么呢?

    先看下 UIViewController 从创建 view 到展示的流程的几个函数

    -init
    -initWithNibName:bundle:

这两个方法都是初始化一个 vc,但请注意 view 不是这时候载入的

    -loadView
    -viewDidLoad

    当一个视图准备展现时,vc 首先会判断 view 是否已经创建否则便通过之前指定的 xib 文件来初始化 view,以及绑定其他关系(若没有指定 xib 文件,则默认会搜索和 vc 同名的 xib,比如 myNameViewController 就会搜索 myNameViewController.xib 文件)

    若是没有 xib 文件,你就可以在 loadview 中自己手动创建这个 viewControoler 需要的视图。接下来就是调用到 -viewDidLoad,许多人喜欢在这里做些其他事情,比如做个 http 请求、建立个数组啥的。这里若不处理正确,-viewDidUnload 激活时内存就容易泄露了,稍后提到。

    -view()appear
    -view()disappear

    这几个方法就不解释了

    -viewDidUnload

    该方法在收到内存警告,同时该视图并不在当前界面显示时候会被调用,此时该 controller 的 view 已经被释放并赋值为 nil。
接下来你要做的是

  1. 把实例变量的子视图释放(IBOulet 的,以及自己添加的)
  2. 其他实例变量,比如之前在 -viewDidLoaded 中实例的数据数组、http 请求释放掉

    因为当该 viewController 再次被激活准备显示时(比如 navigationControler 返回到上一级),vc 发现自己的 view 为空后会重复之前的流程直到把 view 给创建起来。若没将自己额外添加的子视图,各种类实例变量释放,这里便会重新再次创建。

    于是,内存泄露了。

UITableView方法的执行顺序

UITableView的执行顺序 1.它会调用代理方法确定有几行 [TableViewController numberOfSectionsInTableView:] 2.确定每行的表头高和表尾高(如...
  • App_IOS
  • App_IOS
  • 2016年01月17日 12:54
  • 3152

Android自定义View执行过程

http://www.educity.cn/wenda/385963.html Android游戏开发之旅 View类详解   自定义 View的常用方法:   onFinishIn...
  • Cxiaolinxiaozi
  • Cxiaolinxiaozi
  • 2015年04月23日 13:57
  • 1392

根据入栈顺序输出所有可能的出栈顺序 (Java)

某次面试被问到的一个题,当场答得不是很好,所以回来记录一下比如入栈顺序是1,2,3,那么出栈顺序分别可以是1,2,3;1,3,2;…. import java.util.Stack; public c...
  • b7771253
  • b7771253
  • 2016年09月11日 18:13
  • 2105

IOS自定义View实现相应的控件点击方法以及代理的总结(附代码)

继续完善上一篇的博客 我们想在点击cell的时候能够做出相应的反应,现在着手做吧 1.我们在IKEDMyOwnHorizenView.m文件下添加下面代码 -(void)collectionView...
  • xiaoji94shen
  • xiaoji94shen
  • 2014年02月27日 15:00
  • 1328

UIView生命周期(控制器中函数的执行顺序)

原文链接:http://www.jianshu.com/p/85c98a9e93eb    劉光軍_(简书作者) 一、 UIView生命周期大致过程: loadView加载view/nib...
  • BlackWolfSky
  • BlackWolfSky
  • 2016年03月29日 20:08
  • 895

tableView代理方法执行顺序

以前写table也没有关注那么多问题,但是今天突然发现不知道tableView的代理方法执行顺序了解的不是很清楚:于是打了断点来观察执行顺序: 执行顺序如下: 第一轮: 1、numberOfSe...
  • zyzxrj
  • zyzxrj
  • 2015年04月30日 16:40
  • 2988

在项目中使用到了加解密的函数,使用到了openssl,做点记录

其实在项目中使用openssl是受到限制的,openssl是基于GPL的, 所以如果商业用,尽量使用http://www.gladman.me.uk 这是一个和openssl相当的库,用法也和open...
  • zengraoli
  • zengraoli
  • 2013年11月30日 13:31
  • 3910

给定入栈顺序,输出所有可能出栈情况及所有情况的总数

//输入压栈顺序如1 2 3 4 5 6 7 8 ..n,确定所有可能出栈的得到的结果 //同时计算情况的总数n #include #include #include #include us...
  • qq1169091731
  • qq1169091731
  • 2016年04月29日 23:09
  • 2446

python爬虫用户代理

user_agent_list = ["Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrom...
  • zhangmingbao2016
  • zhangmingbao2016
  • 2017年11月06日 22:18
  • 114

为什么要使用动态代理?

为什么要使用动态代理?也就是说它解决了什么问题。 假如现在有这样的需求 需求1-日志:在程序执行期间追踪正在发生的活动 需求2-验证:希望计算器只能处理正数的运算比如:一个加减乘除 运算的类 可...
  • JosephLoveJesus
  • JosephLoveJesus
  • 2016年12月02日 12:07
  • 411
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:构建 View 时可能用到的代理函数调用顺序
举报原因:
原因补充:

(最多只允许输入30个字)