从nib编码对象总结

1、任何对象都可以从nib中load

NSObject(UINibLoadingAdditions)

  • (void)awakeFromNib NS_REQUIRES_SUPER;

但是要保证由正确的 nscoding 协议的方法进行归档/解档

2、第二层意思是指, 解档后的对象,如果连线了, 则被placeholder强引用了。 filesOwner可以使用nib -load后的对象。

3、 其它 没有被placeholder强持有的都 立即被释放了。这里适用于xib。sb的不会,sb的owner对象虽然不持有,但可能被sb对象持有

4、 objects中的个对象除了可以 被filesOwner引用, 还可以被其他的object连线持有。

5、 objects中的除了filsOwner的类,不会调用awakefromNib,initWithCoder,
custom class的类 的 awakefromNib和initWithCode会被调用

6、导致nib文件加载的几种情况

(1)、
APP 启动后 加载UIApplication对象
如果MainInterface 中 设置了指定的xib,或者是storyboard, 则从loadnib中 解档对象。
解档的filesowner属于UIApplication

(2)
手动调用loadnibWithName方法,如果filesowner指定了类型, 则需要owner设置为对应的类型的实例对象,然后load nib会通过kvc设置owner实例对象的相关属性,如果owner的class类,没有属性与连线匹配, 则会崩溃
(3)
UIViewcontroller的new方法,内部会调用initWithNib方法,也会使得nib的owner即为vc

7、导致UIView/NSobject等任一 支持NScoding的 custom类型的
awakefromNib,initWithCoder的加载 的情况:

(1)xib文件中的对象列表中, objects中除了filesowner之外的objects设置了对应customClass,则会触发对应类的initWithCoder,awakeFromNib执行

(2) storyboard文件中的sceneMemberID列表, 会触发vc的类的awakefromNib/initWithCoder

8、storyboard nib其实owner归storyboard 所有,里面的vc等等都是objects,另起了一个名字,叫scene 对象

你可能感兴趣的:(从nib编码对象总结)