分享

nib/xib文件工作原理

 quasiceo 2015-04-23

nib/xib文件工作原理

(2011-09-13 14:48:51)


话说一般序列化后不都是二进制文件么,为什么这里是xml格式的。恩,这就要讲到nib文件的编译和运行的原理了。
nib文件从创建,保存,编译到运行要经历两种序列化。
第一个是IB所用的文档的序列化,序列化的结果就是这个xml文件。它保存的是所有界面的资源信息和各个对象之间的关系。
第二个就是编译时对这个xml文件进行的序列化,序列化的结果就是2进制的nib文件。
写过IBPlugin的人应该知道,所有的控件必须支持initWithCoder和encodeWithCoder的
NSCoding规范,这个就是用来被NSKeyedArchiver序列化用的。
编译时对xml文件做了如下操作
1,读取xml文件,生成所有界面对象,生成所有object(即自定义的controller类等),设置好各个obejct之间的联系(IBAction,IBOutlet)
2,对这一坨对象进行序列化,即调用encodeWithCoder方法来序列化,生成二进制nib文件
为什么要生成二进制文件,因为从二进制文件生成类实例更快一些。
运行时对nib的操作
1,反序列化,调用所有对象的initWithCoder方法
2,某些类的initWithFrame,init之类的方法被调用,生成所有类实例
3,发送awakeFromNib消息,每个类实例的awakeFromNib被调用
猜测nib2.0/3.0时代的多出来的二进制文件应该就是被编译序列化之后的文件,即nib2.0/3.0的nib文件由界面信息文件和运行时二进制文件组成。
由以上的可以看出,凡是被拖到nib里面的对象都会被自动创建实例,无需你代码手动创建(扫盲了。。。),需要用到的话,添加一个IBOutlet即可。
好了,解析完nib的文件结构之后,应该对IB的工作方式有了一个认识,也对你用IB打开nib后看到的东西的背后的实现方式也应该有了一个清晰的认识。
(iPhone的nib跟Mac没有区别,可以参考)
xib本质就是一个xml文件,这点在head first iphone上有清楚的解释。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多