首页 > 编程知识 正文

nib是什么,nib什么意思

时间:2023-05-06 20:04:58 阅读:220616 作者:2856

1.前端渲染/SDK指令不受客户端控制
2.Xcode中很多配置文件其实是html5类前端风格文件可视化呈现。
3.InterfaceBuilder界面编译器交互环境可视化,xib与nib为界面编译器的图形界面设计文档。(InterfaceBuilderXML设计文档/InterfaceBuilderNextStep设计文档)
4.xib(InterfaceBuilderXML图形文档)属于XML格式的纯文本文件,nib(InterfaceBuilderNextStep图形文档)属于二进制码格式文件。由于xib属于纯文本文件相对于二机制机器码文件而言更容易理解,通过xib可以更方便的进行diff差异化操作/版本控制/自我管理等。
5.nib和xib文件区别在于工程师使用理解的方便性,不管界面编译器工具采用nib图形文档还是xib图形文档进行数据临时存储,最后供程序运行时使用的文件必然是经过编译获取到的编译后二进制码文件。
6.Xcode创建项目时默认采用的图形文档为xib格式XML纯文本文件。
7.nib图形文档的序列化构建过程。
8.Xcode中IB默认采用XML纯文本文件保存界面渲染分层的内容资源信息及对象控件信息。
9. Xcode中编译时对XML文本文件进行序列化得到二进制机器码格式文件。
10.所有控件对象实例必支持NSCoding协议规范,支持对initWithCoder/encodeWithCoder访问,实现NSKeyedArchiver序列化
11.Xcode编译时对XML文件行为:1.访问读取XML文件获取界面对象(自定义的controller控件类)构建各对象之间联系(IBAction,IBOutlet)
12.此时结构层次关系模型通过普通XML文本文件存储(接近自然语言),从普通文本文件读取结构层次信息耗时高于从更底层的二进制机器码文件读取二进制格式的信息,就是说从二进制机器码文件读取二进制风格信息构建堆区实例速度更快。
13.普通文本文件通过正向序列化得到二进制码文件;二进制码文件反向序列化得到普通文本文件。
14.Xcode中运行时对nib操作:1.从nib二进制码文件中读取结构层次二进制信息(遵循着NSCoding协议)对象触发initWithCoder成员方法进行反向序列化解析出具有普通格式的信息对象内容层次结构模型触发某些成员方法如initWithFrame/init正式构建引用类实例存储在堆内存区(苏醒,触发awakeFromNib苏醒方法)中供程序运行时调用。
15.编译build时XML->nib/运行run时nib->XML
16.nib2.0/3.0时代编译后多出来的二进制码文件就是编译过程中序列化后获得的nib格式文件即nib2.0/3.0时代的图形文档由普通的界面信息文本文件和供程序运行使用的二进制码文件组成。
17.凡是被拖入xib文本文件的引用类都会自动创建堆实例对象(无需再代码手动构建),通过添加IBOutlet公开成员名持有即可
Nib二进制码文件资源文档保存由InterfaceBuilder构建的对象及对象关系的二进制码。Nib二进制码文件资源文档中保存的二进制码对象包括:接口对象(可视化对象-window/view/control/menu等;非可视化对象-窗口控制器/视图控制器/程序委托代理等)和占位符对象(File’sOwner/FirstResponder/Application)。Nib二进制码文件资源文档描述对象及对象间关系(NibFile’sOwner持有Nib二进制码文件资源文档,NibFile’sOwner(说明文件)中的属性字段绑定实例变量,成员方法绑定方法动作,委托字段绑定委托代理实例)。栈->堆->栈->堆->……。在代码中手工创建占位符对象堆内存区把堆内存区相应传递给Nib二进制码文件资源文档进行匹配,通过次级的字段成员名访问nib文件内的已自动创建的接口对象实例。
Nib文件内的接口对象实例自动构建出来,手工只需要构建栈内存字段名访问读取即可(NibFile’sOwner占位符对象实例)。
1.将Nib二进制码文件中的对象关系内容及相关资源加载至执行内存中但加载进入的数据此时依旧保持序列化状态(Archived)。将所有与Nib二进制码文件相关的图片资源加载至CocoaImageCache中,所有与Nib二进制码文件相关的声音资源加载至CocoaSoundCache。
2.Nib对象图数据进行反序列化获取可操作的有效初始化对象。通过编码器初始成员方法实现图数据的解码初始化。iOS中,任何服从NSCoding协议规范的二进制码对象都需通过initWithCoder解码初始化。
OSX系统中自定义view视图通过触发布局初始化成员方法获取可操作的有效初始化对象。(自定义视图)。
其他引用类自定义对象实例通过init初始化成员方法获取可操作的有效初始化对象。
重建Nib二进制码文件中所有的内容实例和指令执行域本身实例的所有联系(公开的字段成员名outlet/方法名action)源于NibFile’sOwner占位符对象实例。
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处理。
向Nib中相应的对象发送awakeFromNib消息。在iOS中,此消息仅发送给由nib加载代码初始化的对象,File’s Owner、First Responser、任一占位对象都接收不到awakeFromNib消息。
显示那些可见属性为YES的对象。
总结:
A. 加载Nib文件->创建对象alloc->初始化init->创建对象间的连接->向创建的对象发送awakeFromNib消息。
B. 在执行初始化init方法期间,所有的IBOutlet实例变量都为nil,只有创建了nib文件中的所有对象(包括窗口、文本编辑框、按钮…),所有连接才算完成。

C. 一旦建立了所有的连接(即对象地址连接到实例变量),会向所有的对象发送消息awakeFromNib。在awakeFromNib方法中,实例变量已连接,实例变量有效。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。