iPhone:initWithNibName:bundle:方法如果没有使用,可以从UIViewController类中删除吗?

时间:2010-04-03 22:20:32

标签: iphone uiviewcontroller methods

我注意到这个方法在UIViewController .m文件中提供,但是被注释掉了:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

我一直在离开那个方法注释掉,甚至删除它。但后来我在方法中查看了这一行:

if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])

我认为如果将self设置为等于super非常重要,那么Apple默认情况下不会将该方法注释掉。另一方面,如果我确实需要在该方法中进行一些自定义,为什么我需要设置self = super?什么是最佳实践,为什么?

1 个答案:

答案 0 :(得分:2)

您对[super ...]的调用所看到的是嵌套初始化,其中派生类在继续之前首先调用其父类进行初始化。这是Cocoa以及其他一些语言的常见模式。

因此,如果使用匹配的nib(xib)初始化视图控制器,则将调用此initWithNibName:bundle:方法。除非您的派生视图控制器需要在初始化期间执行一些特殊步骤,否则您实际上不需要定义此方法来覆盖父类的实现 - 将使用UIViewController中的现有实现。如果您可以管理初始化代码,viewDidLoad中的初始化代码通常会更好。

由于它是已注释掉的代码,因此您可以将其删除而不必担心它。