如何编写Objective-C便利构造函数

时间:2011-08-12 20:40:56

标签: objective-c

我正在尝试为自定义对象添加一个便利构造函数。 与[NSArray arrayWithArray:]

类似

我知道它涉及一个返回自动释放对象的类方法。我一直在谷歌搜索,但我似乎找到的只是一个便利构造函数的定义,但不是如何写一个。

2 个答案:

答案 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