- (Alpha *)makeAnother {
return [[[self class] alloc] init] autorelease];
}
Этот код отлично работает.Без определения того, что «не работает» означает для вас, трудно сказать больше.
Однако вы должны определить метод как возвращающий (id)
, если вы когда-нибудь ожидаете, что такой шаблон будет работатьбез приведения:
Beta* b = [someObjectIKnowIsBeta makeAnother];
Objective-C не поддерживает совместную / противоположную дисперсию, и поэтому любой метод, который, как ожидается, будет возвращать экземпляры разных классов, объявляется как возвращающий (id)
, чтобы избежать приведения.Это распространено в рамках.См. -dataCell
, +array
, +alloc
и т. Д.