6

在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.

也许这是一个简单的肯定答案......看起来很明显,但不标准?

4

2 回答 2

8

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

注意:这不是重载。重载是指在类 C 语言(尤其是 C++)中非常具体的事情,其中​​您有多个同名的函数,仅通过它们的数量和/或参数类型来区分。一个更好的术语可能是forwardingwrapping

于 2012-11-15T19:06:23.480 回答
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];
}
于 2013-05-12T11:45:07.930 回答