XCode生成的视图控制器上的默认init
方法签名是:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{ }
我看到这些初始化时提供了两个值,只是nib名称(bundle为nil),或者只是nil
两者。一切似乎都有效。
UIViewController如何真正处理self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
?为这两个值传递nil
是否有缺点?
答案 0 :(得分:9)
如果您将nil
作为nibName传递,则该方法将查找与视图控制器具有相同文件名的nib。
例如,如果您有一个名为MyViewController
的视图控制器,它将查找MyViewController.xib
nib文件。
如果找不到笔尖,则需要覆盖loadView
方法来创建并将UIView分配给控制器的视图插座。
- (void)loadView
{
UIView *theView = [[UIView alloc] ...
// Setup the main view
self.view = theView;
}
答案 1 :(得分:1)
来自docs:
nibName:
如果为nibName参数指定nil并且未覆盖loadView方法,则视图控制器将使用其他方法搜索nib文件。请参阅nibName。
nibBundle:
要在其中搜索nib文件的包。此方法首先在bundle的特定于语言的项目目录中查找nib文件,然后是Resources目录。如果为nil,则此方法在主包中查找nib文件。