當我聲明一個Mutable接口的屬性時,我應該始終使它(非原子,複製)?另外什麼時候我會使用分配而不是保留?Objective-C可變屬性,複製保留等?
回答
使用nonatomic
當你關心性能比線程安全更多。原子屬性是線程安全的,但速度較慢。默認行爲是atomic
。
使用copy
當您希望每當將新值設置爲屬性時進行復制。請注意,在很多情況下,copy
實際上並不會生成對象的副本,所以這通常不會影響性能,但是如果某人給了您一個可變副本(例如,您擁有NSString
屬性並且某人分配了NSMutableString
,
千萬不要使用retain
或strong
因爲這些當ARC被關閉時,才需要的,你應該總是ARC打開。strong
和retain
是相同的,這是默認的行爲啓用ARC。只要打開ARC並且忽略這些,但向後兼容代碼除外
有時,例如代理屬性,使用retain
或strong
會造成內存泄漏。在這些競爭對手中,您需要使用weak
或assign
。一般來說,您應該使用weak
,因爲assign
可能有罕見的邊緣案例錯誤。
爲什麼不再使用保留? –
@Savagewood對不起,我打回來,並通過寫它的一半張貼我的答案。保留是現代項目的默認行爲,只有在較早的項目中才需要保留。有些人仍然習慣性地使用它,但現在不使用它。只需打開ARC。 –
是啊當做代表或指向一個對象擁有的別人我使用周或分配? –
- 1. NSArray屬性:複製或保留?
- 2. 「保留塊屬性不會複製塊 - 使用複製屬性代替
- 3. 保留屬性弧
- 4. 如何使NSManagedObject NSString屬性與「複製」,而不是「保留」?
- 5. 的NSString沒有「分配」,「保留」或「複製」屬性指定
- 6. 爲什麼類對象的屬性保留而不是複製?
- 7. XSLT:在複製屬性時保留空格
- 8. PouchDB單向複製,保留本地添加屬性
- 9. 爪哇 - 複製JPG,同時保留所有文件屬性
- 10. 初始化器,屬性,訪問器和複製/保留/只讀
- 11. 繼承一個不可變拷貝屬性作爲可變保留
- 12. 保留Exif /圖像屬性
- 13. 關於保留的屬性
- 14. 擴展保留屬性
- 15. 保留模型屬性
- 16. C#Typedef保留屬性
- 17. REXML保留屬性訂購
- 18. 複製一個屬性到一個變量,屬性被改變
- 19. EXC_BAD_ACCESS複製或保留塊
- 20. 複製時保留計數
- 21. 從自定義模型繼承時保留ModelAdmin屬性(list_display等)
- 22. 如何確定在定義變量屬性時是保留還是分配或複製變量?
- 23. 是否可以告知automapper屬性可以保留爲空?
- 24. 可變屬性
- 25. 我們如何在Android中複製文件並保留其只讀屬性?
- 26. 保留屬性保留/釋放合成設置器
- 27. jquery複製屬性
- 28. 當預期設置ObjectiveC類屬性時?
- 29. 保留已分配的實例變量屬性
- 30. WordPress的 - 改變圖像的文章,但保留屬性
當您正在開發iOS4或更早版本並且無法使用自動引用計數功能時。這是否適用於您的情況?賦值用於原始類型(BOOL,NSInteger)或者不屬於你自己的對象指針。保留是爲內存中的對象w指針。複製將創建一個單獨的副本,以便您可以保持原始原樣。如果你不使用舊代碼,你應該看看ARC和更現代的例子。如果你好奇,請看這裏:http://stackoverflow.com/questions/2255861/property-and-retain-assign-copy-nonatomic-in-objective-c?rq=1 – mc01