使用`self = [self init]`来包装其他`init message`

Ros*_*oss 6 cocoa cocoa-touch objective-c

Objective-C/Cocoa中可接受/安全包装init方法如下:

-(id)init {
    if ((self=[super init])) {
         self.bar = [[Bar alloc] init];
    }
    return self;
}

-(id)initWithFoo:(Foo *)f {
    if ((self=[self init])) {
         self.foo = f;
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

注意[self init]initWithFoo.

也许这是一个简单的答案......似乎很明显,但不是标准的?

Ada*_*eld 8

这当然是可以接受和安全的.我不确定这是否是标准做法,但我不认为这是不好的做法.

注意:这不会超载.重载是指C语言(特别是C++)中非常具体的东西,在这种语言中,您有多个具有相同名称的函数,仅通过它们的数量和/或参数类型来区分.对此更好的术语可能是转发包装.

  • 这绝对是标准做法.这是_designated initializer_的重点.请参阅http://developer.apple.com/library/ios/#documentation/general/conceptual/DevPedia-CocoaCore/MultipleInitializers.html (3认同)