Приложение, преобразованное в ARC, теперь получает предупреждения о моих свойствах

Я только что конвертировал свое приложение в ARC, и, хотя он строит отлично, я получаю как 600 предупреждений, все относящиеся к моим свойствам. Например:

Атрибут свойства по умолчанию "присваивать" не подходит для объекта без gc

Нет атрибута 'assign', 'keep' или 'copy' - 'assign' - Предполагается,

Снимок экрана для предупреждения

После преобразования кода Xcode мой код выглядит следующим образом:

@property (nonatomic) EKEventStore *eventStore;
@property (nonatomic) EKCalendar *defaultCalendar;
@property (nonatomic) UIActionSheet *currentActionSheet;
@property (nonatomic) UILabel *noEventLabel;

Кто-то говорил о необходимости добавить strong ко всем этим. Это так? Xcode забыл что-то добавить?

Ответы

Ответ 1

ARC прав. Вы не можете иметь квалификацию управления памятью; вы должны сказать, назначить, сохранить (или сильное, что то же самое), или слабый.

Раньше назначение было по умолчанию. Но это, вероятно, не то, что вы хотите, потому что это самый худший вариант - это старая версия, отличная от ARC. Вы либо хотите использовать умную ссылку ARC (идет в нуль, когда объект выходит из строя), либо сильная ссылка (управляемая памятью для вас с помощью ARC).

Ответ 2

Извините, что добавили второй ответ, но это оказалось более сложным, чем я думал. Оказывается, вы видите измененное поведение (возможно, ошибку?) В Xcode 4.3.

В Xcode 4.2 преобразователь предложил бы изменить (nonatomic, retain) на (nonatomic, strong). Но в Xcode 4.3 он предлагает изменить его на (nonatomic); Я думаю, если вы этого не хотите, изменение retain до strong зависит от вас перед конвертированием.

С другой стороны, в Xcode 4.2 один только (nonatomic) был абсолютно незаконным для синтезируемого свойства; в Xcode 4.3 это не так: вы получаете предупреждение, но оно предполагает, что вы имеете в виду assign, и поэтому оно не является незаконным.

Итак, произошли изменения в работе ARC в LLVM 3.1 и сопутствующем изменении в конверторе ARC Xcode 4.3.

Ответ 3

Я думаю, что ответы неверны.

В Xcode 4.3 вы получите предупреждение. Однако предполагается, что вы имеете в виду RETAIN. Retain - это новый стандарт для кодов под ARC. Кто-то сказал мне, что xcode исправляет это.

Пожалуйста, поправьте меня, если я ошибаюсь.