2014年5月22日木曜日

self and super

 super
実行するメソッドの検索をコンパイラに伝える単なるフラグ。レシーバとしてのみ使用する。

 self
変数名。

以下 ”Objective-C プログラミング言語” によるサンプル。

 -----------------------------------------------------
+ (Rectangle *)rectangleOfColor:(NSColor *) color
{
    self = [[Rectangle alloc] init]; // BAD
    [self setColor:color];
    return self;
}
 -----------------------------------------------------
+ (id)rectangleOfColor:(NSColor *)color
{
    id newInstance = [[Rectangle alloc] init]; // GOOD
    [newInstance setColor:color];
    return newInstance;
}
 -----------------------------------------------------
+ (id)rectangleOfColor:(NSColor *)color
{
    id newInstance = [[self alloc] init]; // EXCELLENT
    [newInstance setColor:color];
    return newInstance;
}
 -----------------------------------------------------

悪い、良い、 最高の違いは、クラスメソッドがサブクラスからの呼び出しに対応しているかどうか。

0 件のコメント:

コメントを投稿