После 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 удалил их все?
Ответы
Ответ 1
Я столкнулся с тем же предупреждением и открыл Инцидент технической поддержки. Инженер подтвердил, что значение по умолчанию было изменено с "присваивать" "сильному" по причинам согласованности в ARC.
Он сказал, что предупреждение и документация ошибочны и будут исправлены. Пока это не будет сделано, я бы полностью избегал неявного значения по умолчанию!
Явное добавление "сильного" (как предложил Б. Дж. Гомер) - это безопасный способ заставить замолчать предупреждение и быть совместимым. Но не предполагайте, что свойства будут недоступны по умолчанию. Всегда ставьте "слабый" или "назначайте" там.
Изменить: clang documentation теперь официально документирует это изменение. Предупреждение было исправлено.
Изменить 2: Xcode 4.4, по-видимому, включает исправление.
Ответ 2
Похоже, что он преобразовал nonatomic, retain
в nonatomic
. Я всегда видел, как он конвертируется в nonatomic, strong
. Если вы можете создать простой проект, который преобразуется в том виде, в котором вы его видели, я предлагаю подачу радара с ним.
Я предполагаю, что вы используете последний Xcode.