Приложение, преобразованное в ARC, теперь получает предупреждения о моих свойствах - PullRequest
15 голосов
/ 08 марта 2012

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

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

Не указан атрибут «assign», «retain» или «copy» - «assign» Предполагается,

Screenshot for warning

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

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

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

Ответы [ 3 ]

20 голосов
/ 08 марта 2012

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

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

7 голосов
/ 08 марта 2012

Извините, что добавляю второй ответ, но это оказывается более запутанным, чем я думал.Оказывается, вы видите измененное поведение (возможно, ошибку?) В 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 и сопровождающемизменить в Xcode 4.3 ARC конвертер.

3 голосов
/ 05 июня 2012

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

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

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

...