iphone开发基础:loadView/viewDidLoad/initWithNibName/awakeFromNib/initWithCoder的用法
每个ios开发者对loadView和viewDidLoad肯定都很熟悉,虽然这两个函数使用上真的是非常简单,但是和类似的initWithNibName/awakeFromNib/initWithCoder放在一起还是非常容易让人混淆的.
昨天看了下苹果官方的相关文档以及几篇相关内容的网页(一 二 三),其实这个内容以前也看过,似乎也搞清楚了,可还是忘了.好急性不如烂笔头,这次一定要好好记下来.
大前提是UIViewController有一个UIView.同时,需要厘清两个概念,创建一个类和实例化一个类.在XCode中 创建一个类和实例化一个类很容易区分,但是在IB(Interface Builder)中有时候就会迷糊.其实也很好区分,孤零零地创建了一个nib文件,没有和其他可被实例化的类有直接或间接关系的时候,这个类或这些类 (一个nib文件俺也可能包含多个类)是没有机会被实例化的,所以这种情况只是通过ib创建了一个类,而没有实例化.真正的实例化还需要通过在Xcode 用代码来读取这个nib文件.知道这两这的区别后这些方法也就容易辨认多了
viewDidLoad其实没什么可混淆的,无论通过什么途径加载(Xcode或者IB,这里的加载属于实例化)完view后肯定会执行这个方法.
loadView需要分两种情况.当你通过Xcode实例化一个类的时候就需要自己在controller中实现这个方法.而在IB中实例化就不需要实现它.
initWithNibName这个方法是在controller的类在IB中创建,但是通过Xcode实例化controller的时候用的.
awakeFromNib 这个方法是一个类在IB中被实例化是被调用的.看了帖子发现大家都推荐使用viewDidLoad而不要使用awakeFromNib,应为 viewDidLoad会被多次调用,而awakeFromNib只会当从nib文件中unarchive的时候才会被调用一次.实际测试中发现,当一个 类的awakeFromNib被调用的时候,那么这个类的viewDidLoad就不会被调用了,这个感觉很奇怪.
initWithCoder是 一个类在IB中创建但在xocdde中被实例化时被调用的.比如,通过IB创建一个controller的nib文件,然后在xocde中通过 initWithNibName来实例化这个controller,那么这个controller的initWithCoder会被调用.
如 果你的对象是UIViewControler的子类,那么你必须调用- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle*)nibBundleOrNil;方法去调用NIB文件初始化自身,即使那没有使用nib文件也会调用这个函数(默认 情况下init方法已经为你的做这件事情了),如果你调用这个方法,并传递的两个参数为空(nil),然后类会调用-loadView去读取一个名字和你 的UIViewController名字相同的nib文件,来初始化自身。如果没有这样的nib文件,你必须调用-setView:来设置一个 self.view。或者重载-loadView 方法。
转载于:https://www.cnblogs.com/Sucri/p/4655329.html
iphone开发基础:loadView/viewDidLoad/initWithNibName/awakeFromNib/initWithCoder的用法相关推荐
- initWithNibName/awakeFromNib/initWithCoder
2019独角兽企业重金招聘Python工程师标准>>> 每个ios开发者对loadView和viewDidLoad肯定都很熟悉,虽然这两个函数使用上真的是非常简单,但是和类似的ini ...
- iPhone 开发基础教程
Phone 开发基础教程之 在开始编写iPhone软件之前,需要做一些准备工作.对于初学者,需要一台运行Leopard(OS X 10.5.3或更高版本)的基于Intel的Macintosh计算机.2 ...
- iPhone开发基础教程笔记(二)--第三章 处理基本交互
第三章 处理基本交互 本章将编写一个稍微复杂的应用程序,他有两个按钮和一个标签.当用户按下任一按钮时,标签的文本将随之变化 3.1 模型-视图-控制器泛型 首先,让我们了解一些基本概念.Cocoa T ...
- iPhone开发基础教程笔记(十二)--第十二章 使用Quartz和OpenGL绘图
第十二章 使用Quartz和OpenGL绘图 有时应用程序需要能够自定义绘图.一个库是Quartz 2D,她是Core Graphics框架的一部分:另一个库是OpenGL ES,她是跨平台的图形库. ...
- 绘制对象iPhone开发基础教程 笔记
每日一贴,今天的内容关键字为绘制对象 1. 虚拟内存 iPhone OS其实不会将易掉性内存(如应用程序数据)写到交换文件,因此应用程序可用内存量将受到更多的制约. Cocoa Touch供给一种内置 ...
- 深入理解iPhone数据持久化(手把手教你iphone开发 - 基础篇)
作者:孙东风 2009-11-11(请尊重作者劳动成果,转载务必注明出处) 在所有的移动开发平台数据持久化都是很重要的部分:在j2me中是rms或保存在应用程序的目录中,在symbian中可以保存在相 ...
- 移动平台 iPhone开发基础视频教程-第1季_千锋学院出品
该视频由清华大学硕士,原FSMLabs中国区技术总监 ,欧阳老师的视频, 他10多年软件开发经验,6年嵌入式行业教学经验,2年以上iPhone/iPad开发经验,2年以上Android开发经验,负责开 ...
- 《iPhone开发基础教程》第13章 我在哪里?使用Core Location定位功能
Core Location可以利用三种技术实现定位:GPS.蜂窝基站三角网定位(cell tower triangulation)和Wi-Fi定位服务(WPS). GPS是最精确的,但在第一代iPho ...
- [置顶] Objective-C,/,ios,/iphone开发基础:分类(category,又称类别)
在c++中我们可以多继承来实现代码复用和封装使程序更加简练.在objective-c中只能单继承,不能多继承,那么除了协议protocol之外,我们可以实现类似多继承的一个方法就是,分类(catego ...
最新文章
- mhd格式三维图像显示_人体面骨三维有限元模型重构及碰撞分析
- 18岁的他从月薪2000到月薪11000经历了什么?
- Windows Form中的Grid Control
- python-简单测试wsgi
- PL/SQL保存用户名密码 自定义界面
- python在财务领域的应用-浅谈财务智能化在实际工作中的运用
- plsql如何连接oracle11g_64位win7 plsql连不上oracle11gr2 64位—plsql连接配置
- 孙剑亲自撰文:我在 Face++ 的这半年
- python使用redis_python应用中使用redis的几个思考
- 伯克利计算机科学录取率,Berkeley的CS「加州大学伯克利分校计算机科学系」
- [转]Eclipse插件开发之基础篇(3) 插件的测试与调试
- 下架77天后 小红书恢复上架安卓应用市场
- GeoTools——shp转geojson
- Python 标准库 —— os 模块
- Javascript第二章中for循环第四课
- 解决0RA-04031故障
- html5怎么设置字体位置,css如何设置字体位置
- apache评分表的意义_APACHE 评分
- 快闪类企业校园招聘H5,这么设计才够炫!
- [GPS]GPSGate x64下虚拟端口
热门文章
- 视音频技术零基础学习方法
- ML 02、监督学习
- 展望企业级移动设备的操作系统
- 《VMware vSphere企业运维实战》——2.6 使用vCenter Converter迁移物理机到虚拟机
- setAnimationTransition:forView:cache: 运行动画时背景色问题
- DDMS的使用、内存溢出的调试和模拟器的启动命令参数
- GoCart 分类和产品 测试一
- 从B 树、B+ 树、B* 树谈到R 树
- LeetCode 451. Sort Characters By Frequency
- 未来CRM的趋势和预测