У меня была такая же проблема, и после небольшого исследования, вот мой вывод об этой проблеме:
Компилятор предупреждает вас о @property
, который вы объявили как атомарный (то есть, пропуская ключевое слово nonatomic
), но вы предоставляете неполную реализацию того, как синхронизировать доступ к этому свойству.
Чтобы это предупреждение исчезло:
Если вы объявите @property
атомарным, то выполните одно из следующих действий:
- используйте
@dynamic
или;
- используйте
@synthesize
и сохраните синтезированный сеттер и геттер или;
- обеспечивает ручную реализацию и для установщика и получателя (без использования одной из вышеуказанных директив).
Если вы объявите @property
с помощью (nonatomic)
, то вы можете смешать ручную и синтезированную реализации геттеров и сеттеров.
Обновление: примечание об автосинтезе свойств
Начиная с LLVM 4.0, CLang обеспечивает автосинтез для объявленных свойств, которые не @dynamic
. По умолчанию, даже если вы пропустите @synthesize
, компилятор предоставит вам методы получения и установки. Однако правило для атомарных свойств остается тем же: пусть компилятор предоставит и геттер и сеттер, ИЛИ реализует их оба самостоятельно!