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

时间:2012-11-15 19:00:38

标签: objective-c cocoa-touch cocoa

在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;
}

请注意[self init]中的initWithFoo

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

2 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:2)

我知道我迟到了,但我想我会加两分钱。

如果你同时提供一个init(你肯定会这么做)和一个initWithBlah那么你最好做这样的事情......

- (id)initWithValue:(int)value
{
    self = [super init];
    if (self) {
        self.value = value;
    }
    return self;
}

- (id)init
{
    int defaultValue = 10;

    return [self initWithValue:defaultValue];
}