Копировать атрибут памяти для NSString, доступ к которому осуществляется из разных потоков

Копируется ли NSString при каждом доступе к свойству, если оно объявлено как (nonatomic, copy)?

Есть ли необходимость обернуть доступ к строке с помощью NSLock, если доступ к строке осуществляется из разных потоков и она объявлена ​​с копией?


person some_id    schedule 21.02.2017    source источник


Ответы (1)


Атрибут copy указывает, что при присвоении свойства будет сделана копия объекта. Сеттер должен выглядеть примерно так:

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

Однако геттер всегда возвращает собственную копию объекта:

- (NSString *)myProperty {
    return _myProperty;
}

Наконец, если свойство имеет значение NSString *, которое является неизменяемым, нет проблем, если его одновременно читают несколько потоков. Нет необходимости использовать замок для доступа к собственности.

Взгляните на документацию Apple: Копировать свойства Сохранять собственную копию.

person Marcos Crispino    schedule 21.02.2017