我正在尝试为自定义对象添加一个便利构造函数。
与[NSArray arrayWithArray:]
我知道它涉及一个返回自动释放对象的类方法。我一直在谷歌搜索,但我似乎找到的只是一个便利构造函数的定义,但不是如何写一个。
答案 0 :(得分:33)
假设您有以下内容:
@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
。它们在功能上是相同的,但后者为编译器提供了有关方法返回类型的更好提示。
答案 1 :(得分:4)
通常我的方法如下:首先我创建一个普通的初始化方法(实例方法),然后创建一个调用普通初始化器的类方法。在我看来,Apple大多数时候都使用相同的方法。一个例子:
@implementation SomeObject
@synthesize string = _string; // assuming there's an 'string' property in the header
- (id)initWithString:(NSString *)string
{
self = [super init];
if (self)
{
self.string = string;
}
return self;
}
+ (SomeObject *)someObjectWithString:(NSString *)string
{
return [[[SomeObject alloc] initWithString:string] autorelease];
}
- (void)dealloc
{
self.string = nil;
[super dealloc];
}
@end