Нет, это не правильно, поскольку он выделяет, инициирует и возвращает ClassA, а не ClassB. Единственный способ сделать это - не использовать ClassA явно:
+ (id) classA
{
return [[self alloc] init];
}
Конечно, вы также можете использовать старомодный new
для этого:
ClassB *myB = [ClassB new];
FWIW, если я захочу сделать больше, чем просто выделить и инициализировать, а мой класс называется Gadget, тогда я сделаю что-то вроде:
+ (id) gadgetWithNumber: (int) num
{
return [[self alloc] initWithNumber: num];
// or without ARC:
// return [[[self alloc] initWithNumber: num] autorelease];
}
Конечно, это предполагает, что в моем классе есть метод initWithNumber:
.