Xcode 4.2.1 ARC проблема - PullRequest
       36

Xcode 4.2.1 ARC проблема

3 голосов
/ 13 февраля 2012

проект, который работает только на iOS5 и с поддержкой ARC, компилируется в бета-версию Xcode 4.3.1. При компиляции на 4.2.1. LLVM выдает такие предупреждения:

"ARC запрещает синтезировать свойство объекта Objective-C с не указан атрибут владения или хранения "

Итак, определения свойств выглядят так:

@property (nonatomic) NSObject* object

ARC включен в настройках сборки. Добавление сильного атрибута исправляет это предупреждение, но это должно быть по умолчанию верно?

Есть ли разница между версиями Xcode при обработке значений по умолчанию для этих свойств?

Спасибо Andi

1 Ответ

4 голосов
/ 13 февраля 2012

Это не бета-версия. Xcode 4.2.1 имеет такое же поведение (бета-версии под NDA и должны обсуждаться только на законных форумах Apple):

Сильный - значение по умолчанию для ivar с.Для ivars, если вы хотите __unsafe_unretained или __weak, вы должны указать.

Лучше всего указывать атрибуты в объявлениях свойств.Одним из примеров, который всплывает быстрее всего, является текст свойства UILabel, определяемый как:

@property(nonatomic,copy) NSString *text; // default is nil

В этом примере атрибут copy говорит мне, что я могу передать ссылку NSMutableString на метку ион сделает копию, и я смогу поменять строку, метка останется прежней.Поведение четко определено.

И я подозреваю, что именно четко определенное поведение было самой заметной причиной, по которой компилятор ARC заставляет вас указывать атрибуты хранилища.Помните, что благодаря новым средам выполнения, исключающим необходимость объявлять ivars для свойств и @synthesize для методов доступа, вполне возможно, что объявление свойства - это единственная точка, которую вы заметите, если вы случайно сохранили делегата.

Также рассмотрите возможностьвероятность того, что несколько классов в проекте могли быть исключены из ARC, в этих случаях внутренняя реализация будет полностью непрозрачна для ARC.

...