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?