【IOS】分镜和nib文件的差别

摘选自 【精通IOS开发】

nib 文件实际上是静态对象图。当向运行中的应用加载nib 时,它所包含的对象全都会加载并且一直存在,包括nib文件中指定的所有连接。系统将依次为nib文件中的每个单独对象创建一个全新的实例,以及关联所有的输出接口和对象。

  分镜中的每个场景大致上都是相应的nib 文件。当添加了元数据以描述场景如何通过转场互相关联之后,就得到一个分镜。一个复杂的分镜通常不会一次加载所有的内容。相反,任何使新场景获得焦点的行为都会导致分镜停止加载特定场景的静态对象图。也就是说在使用分镜识看到的对象并不一定同时都存在。

   由于界面构建器不知道哪些场景将会共存,所以它其实禁止你从一个场景中的对象向另一个场景中的对象关联任何输出接口或者目标/操作。事实上能够在不同场景之间进行关联的只有转场。


  NIB 文件加载流程 转自【http://edsioon.me/nib-load-process/】


Nib文件是保存由Interface Builder创建的对象及对象间关系的一种资源文档。Nib文件中的对象包括:接口对象(可视化对象–窗口,视图,控件,菜单等;非可视化对象–窗口控制器,视图控制器,程序委托代理等)和占位符对象(File’s Owner,First  Responder,Application)。它描述了对象,以及对象间的关系。对象间的关系包括:连接Nib文件的所有者-File’s Owner,属性实例变量绑定,动作方法绑定和委托绑定。当Nib文件被加载后,接口对象被创建,占位符对象并不会被创建。应该在你的代码中创建此占位符对象,并把它传递给nib的加载代码。

1、将Nib文件内容与相关资源加载到内存

  • 将全部的Nib对象图(object graph)的原始数据加载到内存,但是数据是序列化(unarchived)的。
  • 将所有与Nib文件相关的自定义图片资源加载到内存,且被添加到Cocoa image cache。
  • 将所有与Nib文件相关的声音资源加载到内存,且被添加到Cocoa sound cache。

2、反序列化Nib对象图数据,初始化对象。每个新对象如何初始化取决于对象类型以及序列化的方式。

  • 通常情况下,对象通过initWithCoder:初始化。在iOS中,任何服从NSCoding协议的对象都通过initWithCoder方法初始化。这包括UIView和UIViewController的所有的子类,无论Xcode库的默认类还是自定义类。
  • OS X中自定义View通过initWithFrame:初始化,但是iOS中不使用此方法初始化自定义类
  • 其他自定义对象,通过init方法进行初始化。

3、重建Nib中对象的所有的联系(action、outlet),包括与File’s Owner与其他占位对象的联系

  • outlet connections:在iOS中,nib加载代码利用setValue:forKey:重新连接outlet。在iOS中设置一个outlet会对所有的注册观察者发送一个KVO通知,这些通知有可能在所有的对象联系重建之前发出,并且肯定会发生在对象的任一awakeFromNib被调用之前。
  • action connections:在iOS中,nib加载代码会调用UIControl的addTarget:action:forControlEvents:方法来设置action。如果target参数为nil,action会由responder chain处理。

4、向Nib中相应的对象发送awakeFromNib消息。在iOS中,此消息仅发送给由nib加载代码初始化的对象,File’s Owner、First Responser、任一占位对象都接收不到awakeFromNib消息。

5、显示那些可见属性为YES的对象。

总结

  1. 加载Nib文件->创建对象alloc->初始化init->创建对象间的连接->向创建的对象发送awakeFromNib消息。
  2. 在执行初始化init方法期间,所有的IBOutlet实例变量都为nil,只有创建了nib文件中的所有对象(包括窗口、文本编辑框、按钮…),所有连接才算完成。
  3.  一旦建立了所有的连接(即对象地址连接到实例变量),会向所有的对象发送消息awakeFromNib。在awakeFromNib方法中,实例变量已连接,实例变量有效。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值