2011-01-22 95 views
2

按照Google Objective-C Style Guide,我们应该自动释放则保留为这样:自动释放则保留制定者

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

在这种情况下,foo_不会,如果被设置为相同的情况下释放,从而为更多的防御二传手。

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

回答

4

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

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

这种方法节省CPU周期时,没有变化是必要的,取出使用自动释放池的小的开销。

+0

如果是这样的话,那么谷歌的建议是不是最优? – Jaryl 2011-01-23 06:50:05