Почему «self = [[Rectangle alloc] init]» в методе класса BAD?

В документе "Objective-C "Язык программирования" Apple, на странице 48 говорится:

+ (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;
}

Один плохой, один хороший, а другой отличный. Это почему?

Ответы на вопрос(3)

Ваш ответ на вопрос