我知道UIViewController的指定初始化程序是
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
如果您致电init
,根据文档,它将加载该类的同名nib文件(如果存在)。
但我遇到的是有时候init确实做对了。但有时一些UIViewController的子类的init方法只是不加载它的nib文件。我使用相同的方式创建它们(使用Xcode的助手创建一个UIViewController子类,同时它是关联的nib文件,因此文件名应该都是相同的。)
为什么会这样?
答案 0 :(得分:1)
我发现如果该类是UITableViewController的子类,则必须使用 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
来自笔尖的初始化。
这是因为UIViewController的指定初始化程序是:
(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
因此,如果您使用init
,则会为您致电(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
。
但是UITableViewController的指定初始化程序是:
- (id)initWithStyle:(UITableViewStyle)style
在UITableViewController上使用init
会调用initWithStyle
而不是initWithNibName