nib文件中的file owner属性,设定后app在运行时加载nib文件的过程中会通过file owner重新建立nib文件中描述的控件与其在file owner中对应的IBOutlet或IBAction的连接,所以有的时候通过loadNibNamed函数加载nib文件时会crash,其中的一个可能的原因就是 已经在nib file中指定了控件及其在file owner中对应的IBOutlet或IBAction,但是file owner中没有写对应的IBOutlet或IBAction的代码,因此app在加载这个nib的过程中就可能会crash。
另外,nib文件中控件与对应的IBOutlet或IBAction连接不止可以通过在file owner指定的类实现,也可以在单独的一个控件对应的类中实现,例如可以自定义一个MyUIView类继承自UIView,然后在nib文件中将某一个UIView的class设成MyUIView, 随后在该View中添加的子view都可以先在MyUIView类中定义相应的IBOutlet或IBAction, 然后再建立连接。当然也可以在file owner的类中定义。要注意的一点是通过loadNibNamed加载nib文件时owner参数一定要设对,要与nib文件中指定file owner一致。
loadNibNamed与initWithNibName函数的区别
loadNibNamed是NSBundle中的方法,owner参数要自己指定,该函数返回一个数组,即nib文件描述的UI树形结构的第一层的所有节点。
initWithNibName是UIViewController的方法,owner参数不用自己指定,默认为该UIViewController对应的类。