每个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的用法相关推荐

  1. initWithNibName/awakeFromNib/initWithCoder

    2019独角兽企业重金招聘Python工程师标准>>> 每个ios开发者对loadView和viewDidLoad肯定都很熟悉,虽然这两个函数使用上真的是非常简单,但是和类似的ini ...

  2. iPhone 开发基础教程

    Phone 开发基础教程之 在开始编写iPhone软件之前,需要做一些准备工作.对于初学者,需要一台运行Leopard(OS X 10.5.3或更高版本)的基于Intel的Macintosh计算机.2 ...

  3. iPhone开发基础教程笔记(二)--第三章 处理基本交互

    第三章 处理基本交互 本章将编写一个稍微复杂的应用程序,他有两个按钮和一个标签.当用户按下任一按钮时,标签的文本将随之变化 3.1 模型-视图-控制器泛型 首先,让我们了解一些基本概念.Cocoa T ...

  4. iPhone开发基础教程笔记(十二)--第十二章 使用Quartz和OpenGL绘图

    第十二章 使用Quartz和OpenGL绘图 有时应用程序需要能够自定义绘图.一个库是Quartz 2D,她是Core Graphics框架的一部分:另一个库是OpenGL ES,她是跨平台的图形库. ...

  5. 绘制对象iPhone开发基础教程 笔记

    每日一贴,今天的内容关键字为绘制对象 1. 虚拟内存 iPhone OS其实不会将易掉性内存(如应用程序数据)写到交换文件,因此应用程序可用内存量将受到更多的制约. Cocoa Touch供给一种内置 ...

  6. 深入理解iPhone数据持久化(手把手教你iphone开发 - 基础篇)

    作者:孙东风 2009-11-11(请尊重作者劳动成果,转载务必注明出处) 在所有的移动开发平台数据持久化都是很重要的部分:在j2me中是rms或保存在应用程序的目录中,在symbian中可以保存在相 ...

  7. 移动平台 iPhone开发基础视频教程-第1季_千锋学院出品

    该视频由清华大学硕士,原FSMLabs中国区技术总监 ,欧阳老师的视频, 他10多年软件开发经验,6年嵌入式行业教学经验,2年以上iPhone/iPad开发经验,2年以上Android开发经验,负责开 ...

  8. 《iPhone开发基础教程》第13章 我在哪里?使用Core Location定位功能

    Core Location可以利用三种技术实现定位:GPS.蜂窝基站三角网定位(cell tower triangulation)和Wi-Fi定位服务(WPS). GPS是最精确的,但在第一代iPho ...

  9. [置顶] Objective-C,/,ios,/iphone开发基础:分类(category,又称类别)

    在c++中我们可以多继承来实现代码复用和封装使程序更加简练.在objective-c中只能单继承,不能多继承,那么除了协议protocol之外,我们可以实现类似多继承的一个方法就是,分类(catego ...

最新文章

  1. mhd格式三维图像显示_人体面骨三维有限元模型重构及碰撞分析
  2. 18岁的他从月薪2000到月薪11000经历了什么?
  3. Windows Form中的Grid Control
  4. python-简单测试wsgi
  5. PL/SQL保存用户名密码 自定义界面
  6. python在财务领域的应用-浅谈财务智能化在实际工作中的运用
  7. plsql如何连接oracle11g_64位win7 plsql连不上oracle11gr2 64位—plsql连接配置
  8. 孙剑亲自撰文:我在 Face++ 的这半年
  9. python使用redis_python应用中使用redis的几个思考
  10. 伯克利计算机科学录取率,Berkeley的CS「加州大学伯克利分校计算机科学系」
  11. [转]Eclipse插件开发之基础篇(3) 插件的测试与调试
  12. 下架77天后 小红书恢复上架安卓应用市场
  13. GeoTools——shp转geojson
  14. Python 标准库 —— os 模块
  15. Javascript第二章中for循环第四课
  16. 解决0RA-04031故障
  17. html5怎么设置字体位置,css如何设置字体位置
  18. apache评分表的意义_APACHE 评分
  19. 快闪类企业校园招聘H5,这么设计才够炫!
  20. [GPS]GPSGate x64下虚拟端口

热门文章

  1. 视音频技术零基础学习方法
  2. ML 02、监督学习
  3. 展望企业级移动设备的操作系统
  4. 《VMware vSphere企业运维实战》——2.6 使用vCenter Converter迁移物理机到虚拟机
  5. setAnimationTransition:forView:cache: 运行动画时背景色问题
  6. DDMS的使用、内存溢出的调试和模拟器的启动命令参数
  7. GoCart 分类和产品 测试一
  8. 从B 树、B+ 树、B* 树谈到R 树
  9. LeetCode 451. Sort Characters By Frequency
  10. 未来CRM的趋势和预测