从nib编码对象总结
1、任何对象都可以从nib中load
NSObject(UINibLoadingAdditions)
- (void)awakeFromNib NS_REQUIRES_SUPER;
但是要保证由正确的 nscoding 协议的方法进行归档/解档
2、第二层意思是指, 解档后的对象,如果连线了, 则被placeholder强引用了。 filesOwner可以使用nib -load后的对象。
3、 其它 没有被placeholder强持有的都 立即被释放了。
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 对象