簡體   English   中英

Objective-C 可變屬性、復制保留等?

[英]Objective-C Mutable property, copy retain, etc?

當我為 Mutable 的接口聲明一個屬性時,我應該總是使它(非原子,復制)嗎? 另外我什么時候會使用assign而不是retain?

當您更關心性能而不是線程安全時,請使用nonatomic 原子屬性是線程安全的,但速度較慢。 默認行為是atomic

如果您希望在為屬性設置新值時進行復制,請使用copy 請注意,在許多情況下, copy不會實際制作對象的副本,因此這通常不會影響性能,但是如果有人給您一個可變副本(例如,您有一個NSString屬性並且有人分配了一個NSMutableString ,則可以解決錯誤。

永遠不要使用retainstrong因為它們只在 ARC 關閉時才需要,並且您應該始終打開 ARC。 strongretain是相同的,這是啟用 ARC 的默認行為。 只需打開 ARC 並忽略這些,除了向后兼容的代碼。

有時,例如委托屬性,使用retainstrong會造成內存泄漏。 在這些情況下,您需要使用weakassign 通常,您應該使用weak ,因為assign可能會出現罕見的邊緣情況錯誤。

通常,您在類實現中@synthesize一個屬性,它創建一個 set 函數。 您可以編寫自己的屬性集函數,並在那里進行可變副本。 問題解決了...

- (void)setPropertyName:(propertyType *)newProperty {

  if (propertyName) [propertyName release];
  propertyName = [newProperty mutableCopy];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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