Iphone 在子类中重写init方法并调用[super initWith:bla],正确吗?
我正在对一个类进行子类化。 我正在重写一个init方法。这个:-(id)initWithSomething:(Something*)somet 这看起来像这样(在子类中) 但是现在我想在超类中调用init 我现在该怎么做?可以这样吗Iphone 在子类中重写init方法并调用[super initWith:bla],正确吗?,iphone,objective-c,overriding,superclass,macos,Iphone,Objective C,Overriding,Superclass,Macos,我正在对一个类进行子类化。 我正在重写一个init方法。这个:-(id)initWithSomething:(Something*)somet 这看起来像这样(在子类中) 但是现在我想在超类中调用init 我现在该怎么做?可以这样吗 -(id)initWithSomething:(Something *)somet with:(int)i{ if (self = [super init]) { } [super initWithSomething:somet];
-(id)initWithSomething:(Something *)somet with:(int)i{
if (self = [super init]) {
}
[super initWithSomething:somet];
return self;
}
通常是这样的:
-(id)initWithTarget:(CCNode *)someTarget
{
self = [super initWithTarget:someTarget];
if (self)
{
}
return self;
}
如果需要,super有责任调用vanilla init选择器。通常如下所示:
-(id)initWithTarget:(CCNode *)someTarget
{
self = [super initWithTarget:someTarget];
if (self)
{
}
return self;
}
-(id)initWithSomething:(Something *)somet {
if ((self = [super initWithSomething:somet])) {
// ...
}
return self;
}
如果需要,super有责任调用vanilla init选择器
-(id)initWithSomething:(Something *)somet {
if ((self = [super initWithSomething:somet])) {
// ...
}
return self;
}
只有一个方法应该是类的“指定初始值设定项”。所有其他初始值设定项都应调用该初始值设定项,指定的初始值设定项应调用super
的指定初始值设定项。(这是一条一般规则;有一些例外,例如在initWithCoder:
中,但这是正常的方法。)
只有一个方法应该是类的“指定初始值设定项”。所有其他初始值设定项都应调用该初始值设定项,指定的初始值设定项应调用super
的指定初始值设定项。(这是一条一般规则;有一些例外,例如在initWithCoder:
中,但这是正常的方法。)