为什么我不应该使用getter来释放Object-c中的属性呢?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (19)

有人告诉我不应该使用的getter方法:

@property(nonatmic, retain) Type* variable;
@synthesize variable;

// wrong
[self.variable release]; 

// right
[variable release]; 

他没有详细解释为什么。他们对我来说看起来是一样的。我的iOS书上说属性的getter看起来像这样:

- (id)variable {
    return variable;
}

所以这不是这个意思[self variable]self.variable而且variable都是一样的?

提问于
用户回答回答于

典型的看起来更像这样:

- (id)variable {
   return [[variable retain] autorelease];
}

因此,如果你使用的[self.variable release]是额外的,retain并且autorelease当你只想释放该对象并且导致该对象迟于必要时(释放autorelease池时)被释放,你并不需要。

通常情况下,可以使用self.variable = nil具有设置变量的优点nil(避免由于悬挂指针引起的崩溃),也可以使用[variable release]哪种方法最快,dealloc如果你的setter具有自定义逻辑,则可能更适合于方法。

用户回答回答于

对于没有自定义访问器的保留属性,可以通过以下方式释放对象:

self.variable = nil;

这样做的效果是将IVAR(如果你只声明了属性就不会被称为“变量”)设置为零,并释放前一个值。

正如其他人所指出的,直接释放IVAR(如果可用的话)或使用上面的方法都可以--你不能做的是调用从getter返回的变量。

扫码关注云+社区