Posts tagged ‘init’

在子类(sub-class)中覆盖“初始化”和“默认”函数

I 在CS193P中,Evan强调了以下问题:

为什么要在覆盖init的时候需要检查是否在父类中作初始化,例如:

- (id)init
{
	if(self = [super init])
	{
	}
}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
        // Custom initialization
    }
    return self;
}

主要是将本地对象用父类的init进行初始化,其中的等号“=”另一方面检查了是不是成功进行了初始化。CS193P提供了更多关于这个的信息:

http://cocoadev.com/index.pl?FactoryMethod

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

不仅仅是init等初始化对象,还有其他一些方法(Method)是需要对自己的父类打声招呼得,例如:

- (void)viewDidLoad {
    [super viewDidLoad];
 
}

那这个没有super这句会怎么样呢?没事,一样用。这个是一个delegate,所以需要收听的类应该会收听到的。但是既然缺省的方法就是这么写的,我们也没有必要特意去删除掉这个super方法。