2012年12月30日 星期日

NSString 的 property attribute

假設有某個class,他有一個NSString*的property時,那該怎麼設計這個property的attributes呢 ?

@interface MyClass : NSObject

@property /* ( ??? ) */ NSString* Name;

@end

首先,by default,所有的property都是atomic,也就是說會自動implement thread safety,所以如果只是UI端會用到的property的話,通常是要設定成nonatomic。

接著的問題是,在ARC底下,property的default都是strong,也就是說MyClass的Name會跟他的caller所pass進來的NSString*指向同一個地方。

由於NSString*是immutable,所以似乎strong看起來是個不錯的設定值。可是,由於caller可能會傳入一個NSMutableString (derived from NSString),如果是在這樣子的情形底下的話,就無法保證MyClass的Name的值不會被改到了 !

所以大部分的情形底下,應該都是要設定成copy !


@interface MyClass : NSObject

@property (nonatomic, copy) NSString* Name;

@end


沒有留言:

張貼留言