当一个属性是只读的时候,复制和非原子是无意义的吗?

时间:2014-06-09 16:04:38

标签: ios objective-c properties

假设我有属性

@property (readonly) NSString* p1;
@property (readonly, copy) NSString* p2;
@property (readonly, nonatomic) NSString* p3;

它们之间有什么区别吗?

我认为没有区别因为“复制”和“非原子”没有效果,因为setter方法不存在。

2 个答案:

答案 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