Неправильная практика заключается в том, чтобы установить свойство неатомным вместо того, чтобы синтезировать ivar

119
9

Сегодня я узнал, что при написании собственных методов getter/setter ivars не автоматически синтезируются в getter: свойство, не работающее с getter и setter

Чтобы обойти это, я просто установил, что моя собственность nonatomic а затем написала только setter--, которая позволила мне не писать @synthesize property = _property

Я знаю, что основная цель для nonatomic свойств заключается в том, что система может быстрее читать/записывать свойство, поскольку оно не касается блокировки свойства при записи

Но как побочный эффект (как кажется), вам не нужно писать как сеттер, так и геттер.

Это плохо? Я просто не уверен, есть ли другие недостатки, которые я не вижу

EDIT: добавление кода для ясности:

Реализация:

@interface GalleryManager ()
{
NSObject<GalleryManagerDelegateProtocol>* _delegate;
}

...

-(NSObject<GalleryManagerDelegateProtocol>*)delegate
{
return _delegate;
}

-(void)setDelegate:(NSObject<GalleryManagerDelegateProtocol> *)delegate
{
[self stopObservingDelegate];
_delegate = delegate;
[self startObservingDelegate];

if ( delegate && self.didWakeFromNib )
{
[self setupDefaults];
[self readGalleryFromDisk];
}
}

Заголовок:

@property (weak, nonatomic) NSObject<GalleryManagerDelegateProtocol> *delegate;

Я хотел удалить переменную экземпляра, определенную в расширении (_delegate), без каких-либо причин, кроме того, что я не думал, что это необходимо

Но при этом метод -delegate getter сломался, неспособный распознать _delegate. Поскольку у меня был @property в заголовке, я думал, что _delegate ivar будет автоматически синтезирован, но, как я выяснил, он распознается только в установщике.

Таким образом, в этом вопросе SO, который я связал в начале, ответ заключался в том, чтобы добавить @synthesize delegate = delegate в начале реализации

Но вместо этого я хотел просто изменить @property в заголовке, чтобы он был nonatomic, а затем просто удалил метод -delegate getter

Опять же, ни по какой другой причине, чтобы быть максимально чистым

спросил(а) 2015-09-22T18:31:00+03:00 5 лет назад
0
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема