@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
沒有留言:
張貼留言