2014-06-20 31 views
0

當我聲明一個Mutable接口的屬性時,我應該始終使它(非原子,複製)?另外什麼時候我會使用分配而不是保留?Objective-C可變屬性,複製保留等?

+1

當您正在開發iOS4或更早版本並且無法使用自動引用計數功能時。這是否適用於您的情況?賦值用於原始類型(BOOL,NSInteger)或者不屬於你自己的對象指針。保留是爲內存中的對象w指針。複製將創建一個單獨的副本,以便您可以保持原始原樣。如果你不使用舊代碼,你應該看看ARC和更現代的例子。如果你好奇,請看這裏:http://stackoverflow.com/questions/2255861/property-and-retain-assign-copy-nonatomic-in-objective-c?rq=1 – mc01

回答

1

使用nonatomic當你關心性能比線程安全更多。原子屬性是線程安全的,但速度較慢。默認行爲是atomic

使用copy當您希望每當將新值設置爲屬性時進行復制。請注意,在很多情況下,copy實際上並不會生成對象的副本,所以這通常不會影響性能,但是如果某人給了您一個可變副本(例如,您擁有NSString屬性並且某人分配了NSMutableString,

千萬不要使用retainstrong因爲這些當ARC被關閉時,才需要的,你應該總是ARC打開。strongretain是相同的,這是默認的行爲啓用ARC。只要打開ARC並且忽略這些,但向後兼容代碼除外

有時,例如代理屬性,使用retainstrong會造成內存泄漏。在這些競爭對手中,您需要使用weakassign。一般來說,您應該使用weak,因爲assign可能有罕見的邊緣案例錯誤。

+0

爲什麼不再使用保留? –

+1

@Savagewood對不起,我打回來,並通過寫它的一半張貼我的答案。保留是現代項目的默認行爲,只有在較早的項目中才需要保留。有些人仍然習慣性地使用它,但現在不使用它。只需打開ARC。 –

+0

是啊當做代表或指向一個對象擁有的別人我使用周或分配? –