[英]Autorelease then retain for setters
根據《 Google Objective-C樣式指南》 ,我們應該自動發布然后保留原樣:
- (void)setFoo:(GMFoo *)aFoo {
[foo_ autorelease]; // Won't dealloc if |foo_| == |aFoo|
foo_ = [aFoo retain];
}
在這種情況下,如果將foo_設置為同一實例,則不會將其釋放,從而使防御性更強。
我的問題是,這是@property和@synthesize的工作方式嗎?
由於自動釋放而導致的釋放直到當前運行循環結束時才被調用,因此foo_不會取消分配,因為首先調用了retain,然后在當前運行循環結束時釋放了。 但是,這不是@synthesize中生成的代碼的工作方式。 它更像
- (void)setFoo:(GMFoo *)aFoo {
if (aFoo != foo_) {
[aFoo retain];
[foo_ release];
foo_ = aFoo;
}
}
當不需要更改時,此方法可以節省CPU周期,並節省使用自動釋放池的少量開銷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.