У меня есть класс со свойством объявлено:Atomic свойства с пользовательским добытчиком
@property (nonatomic, strong) NSMutableArray *links;
Я хочу лениво инстанцирую так иметь следующий пользовательский поглотитель:
- (NSMutableArray *)links {
if (!_links) {
_links = [NSMutableArray array];
}
return _links;
}
Мое приложение несколько прогрессировало и теперь объект может быть доступен из разных потоков. Изменить декларацию:
@property (atomic, strong) NSMutableArray *links;
Это создает предупреждение компилятора: Writeable атомно свойство не может объединить синтезированный сеттер с определенным пользователем геттером.
Что я понимаю - я думаю. Мой вопрос: правильный сделать следующее, чтобы создать атомную собственность с пользовательским геттером?:
- создать свою собственную переменную экземпляра _links
- Wrap мой добытчик в
@synchronized
- Создание определенного пользователем сеттер, также завернутые в
@synchronized
EDIT: это код мой новый пользовательский сеттер и геттер:
- (NSMutableArray *)links {
if (!_links) {
@synchronized(self) {
if (!_links) {
_links = [NSMutableArray array];
}
}
}
return _links;
}
- (void)links:(NSMutableArray *)links {
@synchronized(self) {
_links = links;
}
}
Привет, Бритто, спасибо за публикацию, но он не отвечает на вопрос о том, как написать потокобезопасный пользовательский геттер. –
@MagicBulletDave - Лучшее, что я могу сказать, вы попросили атомный пользовательский геттер. Я думаю, что это дает декларация. Вы задали другие вопросы, и этот ответ не пытается ответить на них. Так что это частичный ответ на некоторые из ваших вопросов. Надеюсь, я не ошибаюсь. – jww
Привет, нет, вы не ошибаетесь в вещах - вопрос скорее о правильном шаблоне, который нужно использовать для написания (а не объявления) атомного пользовательского getter. Надеюсь, что это прояснится (я не ответил этим ответом BTW). С уважением, Дэйв. –