Подтвердить что ты не робот

После Auto-ARC Conversion: присвоение сохраненного объекта небезопасному свойству; объект будет выпущен после присвоения

Я просто преобразовал старый проект в ARC, используя автоматический рефакторинг Xcode.

@property (nonatomic, retain) NSMutableArray *cards;

был заменен на:

@property (nonatomic) NSMutableArray *cards;

Это имеет смысл, потому что я прочитал, что "сильный" - это состояние по умолчанию. Однако следующая строка дает мне ошибку в заголовке:

self.cards = [[NSMutableArray alloc] initWithCapacity:54];

Ошибка решается добавлением strong назад, где раньше использовалось значение:

@property (nonatomic, strong) NSMutableArray *cards;

Однако... если мне нужно вернуться и поместить strong в каждое объявление @property, которое было retain... почему рефакторинг ARC удалил их все?

4b9b3361

Ответ 1

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

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

Явное добавление "сильного" (как предложил Б. Дж. Гомер) - это безопасный способ заставить замолчать предупреждение и быть совместимым. Но не предполагайте, что свойства будут недоступны по умолчанию. Всегда ставьте "слабый" или "назначайте" там.

Изменить: clang documentation теперь официально документирует это изменение. Предупреждение было исправлено.

Изменить 2: Xcode 4.4, по-видимому, включает исправление.

Ответ 2

Похоже, что он преобразовал nonatomic, retain в nonatomic. Я всегда видел, как он конвертируется в nonatomic, strong. Если вы можете создать простой проект, который преобразуется в том виде, в котором вы его видели, я предлагаю подачу радара с ним.

Я предполагаю, что вы используете последний Xcode.