假设我有属性
@property (readonly) NSString* p1;
@property (readonly, copy) NSString* p2;
@property (readonly, nonatomic) NSString* p3;
它们之间有什么区别吗?
我认为没有区别因为“复制”和“非原子”没有效果,因为setter方法不存在。
答案 0 :(得分:1)
存在差异,它会影响生成的 getter 的行为方式。
这样的事情:
@property (readonly) NSString* p1;
- (NSString *)p1 {
@synchronized(self) {
return _p1;
}
}
@property (readonly, copy) NSString* p2;
- (NSString *)p2 {
@synchronized(self) {
return [_p2 copy];
}
}
@property (readonly, nonatomic) NSString* p3 {
- (NSString *)p3 {
return _p3;
}
答案 1 :(得分:0)
是的,它们是不同的,因为可以使用类别添加setter。
顺便说一下,should always为NSString属性指定copy
。