ios开发--loadView和viewDid…
来源:互联网 发布:亲和素淘宝扒皮 编辑:程序博客网 时间:2024/06/04 18:31
转载自:http://www.devdiv.com/home.php?mod=space&uid=67799&do=blog&id=10752
每个ios开发者对loadView和viewDidLoad肯定都很熟悉,虽然这两个函数使用上真的是非常简单,但是和类似的initWithNibName/awakeFromNib/initWithCoder放在一起还是非常容易让人混淆的.
一、loadView
永 远不要主动调用这个函数。viewcontroller会在view的property被请求并且当前view值为nil时调用这个函数。如果你手动创建view,你应该重载这个函数,且不要在重载的时候调用[super loadview]。如果你用IB创建view并初始化viewcontroller,那就意味着你使用initWithNibName:bundle:方法,这时,你不应该重载loadView函数。
这个方法系统的默认实现是这样:
1;寻找有关可用的nib文件的信息,根据这个信息来加载nib文件
2;如果没有有关nib文件的信息,默认创建一个空白的UIView对象,然后把对象成赋值给viewcontroller的主view。
所以,如果你决定重载这个函数时,你也应该完成这些步骤:
把子类的view赋给view属性(property)(你create的view必须是唯一的实例,并且不被其他任何controller共享),而且你重载的这个函数不应该调用super,这个也是为了保持主view与controller的单一映射关系。
二、viewDidLoad
这个函数在controller加载了相关的views后被调用,而不论这些views存储在nib文件里还是在loadView函数中生成。
这个函数的作用主要是让你可以进一步的初始化你的views。viewDidLoad通常负责的是view及其子view被加载进内存之后的数据初始化的工作,即视图的数据部分的初始化。在iOS3.0以及更高版本中,你应该重载viewDidUnload函数来释放任何对view的引用或者它里面的内容(子view等等)。
其多数情况下是做nib文件的后续工作。
三、viewDidUnload
这个函数是viewDidLoad的对立函数。在程序内存欠缺时,这个函数被controller调用,来释放它的view以及view相关的对象。由于controller通常保存着view以及相关object的引用,所以你必须使用这个函数来放弃这些对象的所有权以便内存回收。但不要释放那些难以重建的数据。
通常controller会保存nib文件建立的views的引用,但是也可能会保存着loadView函数创建的对象的引用。最完美的方法是使用合成器方法:
1
self.myCertainView
2
=nil;
这样合成器会release这个view,如果你没有使用property,那么你得自己显式释放这个view。
四、结论
所以流程应该是这样:
loadView来加载view(无论nib文件或自定义的views)到内存——>viewDidLoad函数进一步初始化这些view(通常是侧重于数据data的初始化)——>内存不足时,调用viewDidUnload函数释放views
—->当需要使用view时又回到第一步
如此循环
viewDidLoad其实没什么可混淆的,无论通过什么途径加载(Xcode或者IB,这里的加载属于实例化)完view后肯定会执行这个方法.
loadView需要分两种情况.当你通过Xcode实例化一个类的时候就需要自己在controller中实现这个方法.而在IB中实例化就不需要实现它.
initWithNibName这个方法是在controller的类在IB中创建,但是通过Xcode实例化controller的时候用的.
initWithCoder是一个类在IB中创建但在xocdde中被实例化时被调用的.比如,通过IB创建一个controller的nib文件,然后在xcode中通过initWithNibName来实例化这个controller,那么这个controller的initWithCoder会被调用.
awakeFromNib
当.nib文件被加载的时候,会发送一个awakeFromNib的消息到.nib文件中的每个对象,每个对象都可以定义自己的awakeFromNib函数来响应这个消息,执行一些必要的操作。也就是说通过nib文件创建view对象时执行awakeFromNib
viewDidLoad
当view对象被加载到内存后就会执行viewDidLoad,所以不管通过nib文件还是代码的方式创建对象都会执行viewDidLoad。
- ios开发--loadView和viewDid…
- IOS loadView,viewDidLoad,viewDid…
- IOS开发之界面生命周期——init,viewDidAppear,viewWill(dis)Appear,loadView,viewDid(un)Load,dealloc
- IOS开发之界面生命周期——init,viewDidAppear,viewWill(dis)Appear,loadView,viewDid(un)Load,dealloc
- ios开发--loadView和viewDidLoad
- ios开发--loadView和viewDidLoad
- IOS 开发 loadView 和 viewDidLoad…
- IOS 开发 loadView 和 viewDidLoad 的区别
- iOS开发之loadView和viewDidLoad总结
- iOS开发-loadView和viewDidLoad总结
- iOS开发 -- loadView方法
- ios开发--loadView和viewDidLoad,即view的生命周期浅析
- ios开发中ViewDidLoad和loadView的区别
- iOS loadView
- IOS init、loadView、viewDidLoad…
- IOS开发(34)之viewWillAppear: viewDidAppear: viewWillDisappear:viewDidDisappear:loadView
- IOS -- ViewController的LoadView和ViewDidLoad方法相关知识总结
- IOS -- ViewController的LoadView和ViewDidLoad方法相关知识总结
- 参考别人代码实现二叉树
- C语言编辑计算器(含括号)
- viewDidLoad,viewDidUnload
- 双子座的ios1
- 转:ios7(自动旋屏)iOS6不支持shou…
- ios开发--loadView和viewDid…
- 使用系统自带的 UIRefreshControl 实现下拉刷新
- ios资源地址
- UIPickerView常用方法详解
- IOS UITableView NSInde…
- @property 的使用
- javascript Date format(js日期格式化)
- PicList2 App项目笔记(一)…
- UITableView的常用代理方法