在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
。
也许这是一个简单的答案......似乎很明显,但不是标准的?
答案 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];
}