如果我有以下属性:
@property (nonatomic, retain) MyObject *theObject;
那么如果我想创建一个新的 MyObject,我是否:
self.theObject = [[MyObject alloc] init];
或者:
self.theObject = [[[MyObject alloc] init] autorelease];
如果我有以下属性:
@property (nonatomic, retain) MyObject *theObject;
那么如果我想创建一个新的 MyObject,我是否:
self.theObject = [[MyObject alloc] init];
或者:
self.theObject = [[[MyObject alloc] init] autorelease];
你必须使用自动释放。如果你不这样做,该对象将有两个释放计数(一个来自alloc
,一个来自retain
setter),因此当属性未设置时,它将被泄露。
这仅适用于强或保留和复制属性。分配和弱属性应该只分配一个分配初始化的对象,因为它们不会改变其引用计数。
如果你必须 - 第二个。
如果您使用的是生成的 setter,则已将其标记为retain
. 这意味着存储在该属性中的值将为您保留,因此您无需将其传递给拥有的对象。
由于它被保留,您需要在您的 dealloc 中释放它。