我注意到这个方法在UIViewController .m文件中提供,但是被注释掉了:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
我一直在离开那个方法注释掉,甚至删除它。但后来我在方法中查看了这一行:
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])
我认为如果将self设置为等于super非常重要,那么Apple默认情况下不会将该方法注释掉。另一方面,如果我确实需要在该方法中进行一些自定义,为什么我需要设置self = super?什么是最佳实践,为什么?
答案 0 :(得分:2)
您对[super ...]
的调用所看到的是嵌套初始化,其中派生类在继续之前首先调用其父类进行初始化。这是Cocoa以及其他一些语言的常见模式。
因此,如果使用匹配的nib(xib)初始化视图控制器,则将调用此initWithNibName:bundle:
方法。除非您的派生视图控制器需要在初始化期间执行一些特殊步骤,否则您实际上不需要定义此方法来覆盖父类的实现 - 将使用UIViewController
中的现有实现。如果您可以管理初始化代码,viewDidLoad
中的初始化代码通常会更好。
由于它是已注释掉的代码,因此您可以将其删除而不必担心它。