nib 加载过程分析以及对File’s Owner的理解
nib loading的过程,这个是app文档里面有说到资源编程指南
1.
It loads the contents of the nib file and any referenced resource files into memory。将nib文件和其中引用到的资源文件加载到内存中。
2.It unarchives the nib object graph data and instantiates the objects。
解析nib对象,并对其进行实例化。对实例的对象初始化规则.
a .By default, objects receive an
initWithCoder:
message.默认调用initWithCoder:.对于所有遵循NSCoding协议的对象,包括UIView和UIViewController的子类都会调用这个方法。
b.Custom views in iOS do not use the
initWithFrame:
method for initialization.
这针对于OS X。iOS的自定义view没有这个方法。所以这里忽略。
c.Custom objects other than those described in the preceding steps receive an
init
message. 也就是其他对象将会调用init方法。
3. It reestablishes all connections (actions, outlets, and bindings) between objects in the nib file。重新为nib文件中的对象简历连接。包括placeholder对象的链接。
outlet的链接。In iOS, the nib-loading code uses the
setValue:forKey:
method to reconnect each outlet。iOS中使用的的mvc机制对其进行操作。
Action connections。in iOS, the nib-loading code uses the
addTarget:action:forControlEvents:
method of the
UIControl
object to configure the action. If the target is
nil
, the action is handled by the responder chain.使用的是addTarget:action:forControlEvents进行关联。如果目标是nil。那么这个action将会被相应链处理
Bindings。iOS不支持这个
4.It sends an
awakeFromNib
message to the appropriate objects in the nib file that define the matching
selector
:
In iOS, this message is sent only to the interface objects that were instantiated by the nib-loading code. It is not sent to File’s Owner, First Responder, or any other placeholder objects.这个消息只会发送给再nib loading过程中实例化的对象,而不会给placeholder objects发送这个消息。
5. It displays any windows whose “Visible at launch time” attribute was enabled in the nib file.
下面主要是分析connect的具体建立过程。
我们再xib中拖拽,不管是File's Owner还是再Object中进行的。都会再xib文件中保持这种链接关系。
这个是再object中建立的connect。其中包含有链接的源和目的目标,这个分别用ref做的标记。还有一个label,这就是我们的IBOutLet的名称了。
通过上面的xib的代码可以知道这个链接是和cell关联的,而不是和file‘s owner关联的。
下面再来看看和File’s owner关联的
看到了吧。其实你拖拽的链接关系都记录在了xib中了。再补充一个就是自定义类,很多时候我们都是要使用我们自定义的类。这个是再下面的图里面进行了描述。
到这里就差不多理解,nib再加载过程中是如何生成我们需要的对象,以及如果将IBOutLet和IBAction关联起来的了吧。细心的人可能注意到了File‘s Owner这个东西了,
那么这个对象又扮演着什么样的角色呢?
File's Owner是控制对象,可以说是nib文件的所有者,控制管理可视化对象。
这个和使用代码loadNibNamed中的owner是一样的意思。File's Owner作为占位符,是需要提前再使用nib加载之前存在的。我们一般将File‘s Owner设置为我们自己的Controller类,然后使用initWithNib来生成我们的Controller对象。其实 UIViewController是采用延迟加载的方式,只要需要使用view的时候才会真正的将nib加载起来,这个使用其实底下用的还是
NSBundle
的loadNibNamed这个方法,此时owner就是UIViewController了。这样我们在建立connect的时候就有了对象了。
除了File’s Owner作为那些使用File‘s Owner建立链接必须之外,File’s Owner还有负责内存管理的功能。这个可以参考IBOutlet内存管理,在apple给的文档中也有说明或者google/百度一下也可以。
nib 加载过程分析以及对File’s Owner的理解的更多相关文章
- 转:A10/A20 Bootloader加载过程分析
来自:http://blog.csdn.net/allen6268198/article/details/12905425 A10/A20 Bootloader加载过程分析 注:由于全志A10和A20 ...
- 【转】全志A10/A20 Bootloader加载过程分析
原文 : http://blog.csdn.net/allen6268198/article/details/12905425 从这里开始:http://linux-sunxi.org/Bootabl ...
- ios中自定义tableView,CollectionView的cell什么时候用nib加载,什么时候用标识重用
做了一段时间的iOS,在菜鸟的路上还有很长的路要走,把遇到的问题记下来,好记性不如烂笔头. 在项目开发中大家经常会用到tableView和collectionView两个控件,然而在cell的自定义上 ...
- UIViewController XIB/NIB加载过程
UIViewController中关于nib初始化的函数 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBu ...
- seaJS 模块加载过程分析
先看一个seajs的官方example, 以下以seajs.use('main')为例, 解析加载mod main的过程 //app.html seajs.use("main") ...
- Nib加载的方式实现自定义TableView
实现的效果 实现原理: 通过在主界面中用Bundle 的LoadNib的方式进行自定义窗体文件加载并渲染界面 实现步骤 Step One 创建TableViewCell 窗体 Step Two 定义接 ...
- Insmod模块加载过程分析
一.背景 a) 在进行JZ2440的一个小demo开发的时候,使用自己编译的内核(3.4.2)及lcd模块进行加载时,insmod会提示加载失败因为内核版本不匹配(提示当前内核版本为空),并且显示模块 ...
- php编译完php.ini加载问题-Loaded Configuration File (none)
编译安装php7时指定了--with-config-file-path=/usr/local/php7/etc,修改了 php.ini 的配置后重启,但就是不生效. 出现Loaded Configur ...
- 动态加载 移除js file
动态加载.移除.替换js/css文件 stylesheetjavascriptcssfunctionnull <script language="javascript"> ...
随机推荐
- MySQL的表管理
首先,先选择数据库(极其特别重要,如果不选择,将默认为第一个数据库) mysql > use db_name; 查看所有表 mysql > show tables; 1.创建表 creat ...
- [实战]MVC5+EF6+MySql企业网盘实战(14)——逻辑重构
写在前面 上篇文章关于修改文件夹和文件名称导致的找不到物理文件的问题,这篇文章将对其进行逻辑的修改. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6 ...
- 【51nod】1309 Value of all Permutations
题解 可重元素的全排列都是很熟知的东西了 就是 \(\frac{n!}{\prod c_{i}!}\)其中\(c_{i}\)是第i种数出现的次数 我们对于每个元素统计一下多少排列里这个数会被统计进去 ...
- 【LOJ】#2351. 「JOI 2017/2018 决赛」毒蛇越狱
题解 没啥特别好的算法,是个讨论题,由于0 1 ?三类数位中最少的不会超过6 如果1不超过6,那么记录\(f1(S)\)为 \(\sum_{T \subset S} val(T)\)这个可以通过类似F ...
- ElasticSearch部署文档(Ubuntu 14.04)
ElasticSearch部署文档(Ubuntu 14.04) 参考链接 https://www.elastic.co/guide/en/elasticsearch/guide/current/hea ...
- 转:The Great DOM Fuzz-off of 2017
The Great DOM Fuzz-off of 2017 Posted by Ivan Fratric, Project Zero https://googleprojectzero.blogsp ...
- 深入浅出Spring(二) IoC详解
上次的博客深入浅出Spring(一)Spring概述中,我给大家简单介绍了一下Spring相关概念.重点是这么一句:Spring是为了解决企业应用开发的复杂性而创建的一个轻量级的控制反转(IoC)和面 ...
- 转载:tar命令批量解压方法总结
由于linux的tar命令不支持批量解压,所以很多网友编写了好多支持批量解压的shell命令,收集了一下,供大家分享: 第一:for tar in *.tar.gz; do tar xvf $tar ...
- 【BZOJ 3998】 3998: [TJOI2015]弦论 (SAM )
3998: [TJOI2015]弦论 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 2627 Solved: 881 Description 对于一 ...
- 【UOJ 34】 #34. 多项式乘法 (FFT)
[分析] 这个只是用来放模板..[其实我还没完全懂的.. 迭代 代替 递归: #include<cstdio> #include<cstdlib> #include<cs ...