簡體   English   中英

自動釋放,然后保留給二傳手

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM