xib 被 viewController 加载的原理
在创建一个 ViewController 的时候 可以选择是否创建一个 Xib 文件.如果勾选,就会创建一个跟创建 ViewController 同名的一个 xib 的文件,并且被关联,在用到这个 ViewController 的时候,只需用[[ViewController alloc]init] 就可以加载到这个 xib.
但是如果不勾选,而事后再去单独创建一个 xib 文件和此 ViewController 做关联的话.这个 xib 的文件名 决定加载 xib 的方法.
1.如果 xib 和 viewController 名字不一样,比如 viewController 叫做"HomeViewController" xib 叫做"Test.xib"那么即使关联, 用 init 方法创建 ViewController 是不能加载到这个 xib 的.要用到initWithNibName:@"Test" bundle:nil 这个方法去创建.
2.可以把 xib 的命名和 ViewController 一样的话,只需 init 方法就可以加载到.原理是ViewController 的 init 内部方法中首先会加载和 viewController 同名的 xib, 如果没有,则再加载去掉"controller"后的命名的 xib, 如果还是没有,则nil
例子: ViewController 命名为DemoViewController. 用 init 创建的时候,第一步寻找 命名为DemoViewController 的 xib.第二步 寻找命名为 DemoView 的 xib.如果都没寻找到 那么不加载任何 xib, 即使有关联
情况1:
DemoViewController 关联上 DemoView.xib, init 方法会加载此 xib
情况2:
DemoViewController 关联上 DemoViewController.xib,init 方法会加载此 xib
情况3:
DemoViewController 关联上了 DemoView.xib 和 DemoViewController.xib 两个 xib 文件,那么 init 方法则会加载 DemoViewController.xib 的内容
情况四:
DemoViewController 关联的 xib 名字叫做 VIewController.xib 那么用 init 方法则不会加载此 xib, 必须用initWithNibName:@"VIewController" bundle:nil方法才可以加载此 Xib.