UILabel *testLbl = [[self alloc] init];
Вот тут и началась путаница:
Обычно лучше использовать переменную, отличную от self, для ссылки на экземпляр внутри класса
Метод:
+ (id)rectangleOfColor:(NSColor *)color {
id newInstance = [[Rectangle alloc] init]; // GOOD [newInstance setColor:color]; return [newInstance autorelease];
}
Фактически, вместо того, чтобы отправлять сообщение alloc классу в методе класса, часто лучше отправлять alloc для себя. Таким образом, если класс разделен на подклассы, а подгруппа получает rectangleOfColor: message, возвращаемый экземпляр будет того же типа, что и подкласс (например, метод массива NSArray наследуется NSMutableArray).
+ (id)rectangleOfColor:(NSColor *)color {
id newInstance = [[self alloc] init]; // EXCELLENT [newInstance setColor:color]; return [newInstance autorelease];
}