复制从不同线程访问的NSString的内存属性

时间:2017-02-21 16:33:36

标签: objective-c nsstring

如果NSString声明为(nonatomic, copy)

,则会在每次访问属性时复制它

如果从不同的线程访问/变换字符串并使用副本声明字符串,是否需要使用NSLock对字符串进行包装访问?

1 个答案:

答案 0 :(得分:1)

copy属性表示在分配属性时,将创建对象的副本。 setter应该类似于:

- (void)setMyProperty:(NSString *)value {
    _myProperty = [value copy];
}

但是,getter总是返回对象自己的副本:

- (NSString *)myProperty {
    return _myProperty;
}

最后,如果属性是NSString *,这是不可变的,如果有许多线程同时读取它,则没有问题。没有必要使用锁来访问该属性。

查看Apple的文档:Copy Properties Maintain Their Own Copy