Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 在子类中重写init方法并调用[super initWith:bla],正确吗?_Iphone_Objective C_Overriding_Superclass_Macos - Fatal编程技术网

Iphone 在子类中重写init方法并调用[super initWith:bla],正确吗?

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];

我正在对一个类进行子类化。 我正在重写一个init方法。这个:-(id)initWithSomething:(Something*)somet

这看起来像这样(在子类中)

但是现在我想在超类中调用init

我现在该怎么做?可以这样吗

-(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:
中,但这是正常的方法。)