然后自动释放保留给安装者

时间:2011-01-22 13:02:31

标签: objective-c properties autorelease

根据Google Objective-C Style Guide,我们应该自动释放然后保留:

- (void)setFoo:(GMFoo *)aFoo {
  [foo_ autorelease];  // Won't dealloc if |foo_| == |aFoo|
  foo_ = [aFoo retain];
}

在这种情况下,如果将foo_设置为相同的实例,则不会释放foo_,从而成为更具防御性的setter。

我的问题是,这是@property& @synthesize工作?

1 个答案:

答案 0 :(得分:4)

由于自动释放而导致的

在当前runloop结束时才被调用,所以foo_不会dealloc,因为先调用retain,然后在当前runloop结束时释放。但是,这不是@synthesize中生成的代码的工作原理。它更像是

- (void)setFoo:(GMFoo *)aFoo {
   if (aFoo != foo_) {
      [aFoo retain];
      [foo_ release];
      foo_ = aFoo;
   } 
}

此方法在不需要更改时节省了cpu周期,并且消除了使用自动释放池的小开销。