iOS非弧:当self.property = init]时,我应该使用autorelease吗?

如果我有以下属性:

@property (nonatomic, retain) MyObject *theObject; 

那么如果我想要创build一个新的MyObject,那么:

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

要么:

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

你必须使用autorelease。 如果你不这样做的话,这个对象的释放次数是2(一个来自alloc ,一个来自setter的retain ),所以当这个属性被取消时,它会被泄漏。

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

如果你必须 – 第二个。

如果您正在使用生成的设置器,则用retain标记它。 这意味着存储在该属性中的值将为您保留,所以您不需要传递它拥有的对象。

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