0

如果我有以下属性:

@property (nonatomic, retain) MyObject *theObject;

那么如果我想创建一个新的 MyObject,我是否:

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

或者:

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

2 回答 2

2

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

这仅适用于强或保留和复制属性。分配和弱属性应该只分配一个分配初始化的对象,因为它们不会改变其引用计数。

于 2013-01-30T11:48:11.893 回答
2

如果你必须 - 第二个。

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

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

于 2013-01-30T11:48:44.520 回答