iOS非弧:我应该在self.property = [[Obj alloc] init]时使用autorelease吗?

时间:2013-01-30 11:44:33

标签: ios objective-c

如果我有以下属性:

@property (nonatomic, retain) MyObject *theObject;

然后如果我想创建一个新的MyObject,请执行以下操作:

self.theObject = [[MyObject alloc] init];

或:

self.theObject = [[[MyObject alloc] init] autorelease];

2 个答案:

答案 0 :(得分:2)

你必须使用自动释放。如果不这样做,该对象的释放计数为2(一个来自alloc,一个来自设置者的retain),因此当该属性未设置时,它将被泄露。

这仅适用于strong或保留和复制属性。应该为赋值和弱属性分配一个alloc-initted对象,因为它们不会改变它的引用计数。

答案 1 :(得分:2)

如果你必须 - 第二个。

如果您使用的是生成的setter,则表示已将其标记为retain。这意味着将保留存储在该属性中的值,因此您无需将其传递给拥有的对象。

由于它被保留,您需要在dealloc中释放它。