0

Stephen KochanのObjective-Cの本(私は第3版を持っています)では、1つのinit関数が戻りFraction *、もう1つが戻ります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

Initidメソッドは、所属するクラスのオブジェクトを必ずしも返すとは限らないため、通常は型を返します。

たとえば、-[NSMutableArray init]実際にはオブジェクトを返しNSCFMutableArrayます。

于 2012-04-23T01:47:44.163 に答える
1

イニシャライザから戻ることをお勧めしidます。

他の構文を使用することもできますが、実際には非常にノイズが多くなります(サブクラス化することがなく、セレクターが一意であることが保証されている場合を除きます)。

便利なコンストラクターは問題ありませんが、コンストラクターに型名を追加するのが最も安全です。

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

これらの対策がないと、プログラムはいくつかのコンパイラの警告とエラーにさらされます。

于 2012-04-23T01:53:08.160 に答える