返回对象并转移所有权的类方法

时间:2011-01-26 02:14:50

标签: objective-c

[这是内存管理澄清/问题]

  • 我有一个返回NSMutableArray *的类方法。
  • 我希望调用者拥有它并且必须调用release。
  • 我不想使用AutoRelease,因为我希望它在调用者完成后立即从内存中释放出来。

只要我使用new或alloc启动名称,这是否可以正确?

e.g。

+ (NSMutableArray*) newArrayFromDB
{
  NSMutableArray* myArray = [[NSMutableArray alloc] init];
  //stuff to populate array
  return myArray;
}

然后来电者将致电:

 NSMutableArray* test = [ThatClass newArrayFromDB];
  //use test
  [test release];

静态分析器似乎认为它没问题......但我想要第二个意见......

感谢您的反馈......

2 个答案:

答案 0 :(得分:4)

是的,您所做的是正确的 - 您正在遵循object ownership policy 中的规则。

我可能会质疑的唯一一点是I don't want to use AutoRelease because I want it freed from memory as soon as caller is done。默认的自动释放池每次都通过主运行循环耗尽,因此在大多数情况下,内存将很快释放。而且,如果调用者需要尽快强制释放,它总是可以手动分配/排出自动释放池。当然,一种方法是创建两种便捷方法+ newArrayFromDB:+arrayFromDB;一个自动释放,一个不自动释放。

答案 1 :(得分:1)

是的,这是做到这一点的方法。

我可能会使用“创建”这个词来表示来电者拥有所有权,但我猜也是新的。


P.S。使用allocWithZone:如果你想要提高速度,那么NULL比alloc更快。