Копируется ли NSString при каждом доступе к свойству, если оно объявлено как (nonatomic, copy)
?
Есть ли необходимость обернуть доступ к строке с помощью NSLock, если доступ к строке осуществляется из разных потоков и она объявлена с копией?
Копируется ли NSString при каждом доступе к свойству, если оно объявлено как (nonatomic, copy)
?
Есть ли необходимость обернуть доступ к строке с помощью NSLock, если доступ к строке осуществляется из разных потоков и она объявлена с копией?
Атрибут copy
указывает, что при присвоении свойства будет сделана копия объекта. Сеттер должен выглядеть примерно так:
- (void)setMyProperty:(NSString *)value {
_myProperty = [value copy];
}
Однако геттер всегда возвращает собственную копию объекта:
- (NSString *)myProperty {
return _myProperty;
}
Наконец, если свойство имеет значение NSString *
, которое является неизменяемым, нет проблем, если его одновременно читают несколько потоков. Нет необходимости использовать замок для доступа к собственности.
Взгляните на документацию Apple: Копировать свойства Сохранять собственную копию.