如果NSString声明为(nonatomic, copy)
?
如果从不同的线程访问/变换字符串并使用副本声明字符串,是否需要使用NSLock对字符串进行包装访问?
答案 0 :(得分:1)
copy
属性表示在分配属性时,将创建对象的副本。 setter应该类似于:
- (void)setMyProperty:(NSString *)value {
_myProperty = [value copy];
}
但是,getter总是返回对象自己的副本:
- (NSString *)myProperty {
return _myProperty;
}
最后,如果属性是NSString *
,这是不可变的,如果有许多线程同时读取它,则没有问题。没有必要使用锁来访问该属性。
查看Apple的文档:Copy Properties Maintain Their Own Copy。