如何在Objective-C中创建一个allocator类方法?

时间:2009-04-22 15:33:51

标签: objective-c

我有一个具有bar属性的NSFoo类。我想有一个类方法来获取一个带有bar属性集的NSFoo实例。这与NSString stringWithFormat类方法类似。签名将是:

+ (NSFoo *) fooWithBar:(NSString *)theBar;

所以我会这样称呼它:

NSFoo *foo = [NSFoo fooWithBar: @"bar"];

我认为这可能是正确的:

+ (NSFoo *) fooWithBar:(NSString *)theBar {
  NSFoo *foo = [[NSFoo alloc] init];
  foo.bar = theBar;
  [foo autorelease];
  return foo;  
}

看起来不错吗?

2 个答案:

答案 0 :(得分:2)

是。看起来不错。你的实现似乎是一种常见的做法。

答案 1 :(得分:2)

是的,您的实施看起来是正确的。由于-[NSObject autorelease]返回self,因此您可以将return语句写为return [foo autorelease]。如果您打算使用自动释放(而不是发布),有些人建议在分配时自动释放对象,因为它使意图清晰并将所有内存管理代码保存在一个位置。然后您的方法可以写成:

+ (NSFoo *) fooWithBar:(NSString *)theBar {
  NSFoo *foo = [[[NSFoo alloc] init] autorelease];
  foo.bar = theBar;

  return foo;  
}

当然,如果存在-[NSFoo initWithBar:],您可能会将此方法编写为

+ (NSFoo *) fooWithBar:(NSString *)theBar {
  NSFoo *foo = [[[NSFoo alloc] initWithBar:theBar] autorelease];

  return foo;  
}