0

在 Stephen Kochan 的 Objective-C 书(我有第 3 版)中,一个 init 函数返回Fraction *,一个返回id

-(Fraction *) initWith: (int) n: (int) d {
    self = [super init];
    if (self)
        [self setTo: n over: d];

    return self;
}

-(id) init {
    return [self initWith: 0 over: 0];
}

(在本书的第 198 至 199 页)。为什么会这样,如果两者都返回Fraction *或都返回id(或有initreturnFraction *initWithreturn id)有关系吗?这样做有什么副作用(如果有的话)?

4

2 回答 2

1

Init方法通常返回id类型,因为它们不一定返回它们所属类的对象。

例如,-[NSMutableArray init]实际上返回一个NSCFMutableArray对象。

于 2012-04-23T01:47:44.163 回答
1

倾向于id从初始化器返回。

您可以使用其他语法,但在实践中它非常嘈杂(除非您从未子类化并且选择器保证是唯一的)。

方便的构造函数很好,但是将类型名称添加到构造函数中是最安全的:

+ (Fraction *)newFractionWithNumerator:(int)pNumerator denominator:(int)pDenominator;

如果没有这些措施,您的程序将面临多个编译器警告和错误。

于 2012-04-23T01:53:08.160 回答