2011-01-22 51 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