Warum ist "self = [[Rectangle alloc] init]" in einer Klassenmethode BAD?

In dem Dokument "Objective-C Programming Language" von Apple heißt es auf Seite 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;
}

Einer ist schlecht, einer ist gut und der andere ist ausgezeichnet. Warum das?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage