[英]Objective-C Mutable property, copy retain, etc?
當我為 Mutable 的接口聲明一個屬性時,我應該總是使它(非原子,復制)嗎? 另外我什么時候會使用assign而不是retain?
當您更關心性能而不是線程安全時,請使用nonatomic
。 原子屬性是線程安全的,但速度較慢。 默認行為是atomic
。
如果您希望在為屬性設置新值時進行復制,請使用copy
。 請注意,在許多情況下, copy
不會實際制作對象的副本,因此這通常不會影響性能,但是如果有人給您一個可變副本(例如,您有一個NSString
屬性並且有人分配了一個NSMutableString
,則可以解決錯誤。
永遠不要使用retain
或strong
因為它們只在 ARC 關閉時才需要,並且您應該始終打開 ARC。 strong
和retain
是相同的,這是啟用 ARC 的默認行為。 只需打開 ARC 並忽略這些,除了向后兼容的代碼。
有時,例如委托屬性,使用retain
或strong
會造成內存泄漏。 在這些情況下,您需要使用weak
或assign
。 通常,您應該使用weak
,因為assign
可能會出現罕見的邊緣情況錯誤。
通常,您在類實現中@synthesize
一個屬性,它創建一個 set 函數。 您可以編寫自己的屬性集函數,並在那里進行可變副本。 問題解決了...
- (void)setPropertyName:(propertyType *)newProperty {
if (propertyName) [propertyName release];
propertyName = [newProperty mutableCopy];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.