Допустим, у вас есть следующее:
@class PotatoPeeler : NSObject
- (instancetype)initWithWidget: (Widget *)w;
@end
Затем, чтобы добавить фабричный метод, вы должны изменить его на следующее:
@class PotatoPeeler : NSObject
+ (instancetype)potatoPeelerWithWidget: (Widget *)w;
- (instancetype)initWithWidget: (Widget *)w;
@end
И ваша реализация будет просто так:
+ (instancetype)potatoPeelerWithWidget: (Widget *)w {
return [[[self alloc] initWithWidget: w] autorelease];
}
Редактировать: заменено id
на instancetype
.Они функционально идентичны, но последний предоставляет лучшие подсказки компилятору о типе возвращаемого значения метода.