Если я решу перейти на iOS 5, нужно ли мне удалить все операторы [myObject retain] и [myObject release] из моего кода?
Да, но XCode 4.2 включает в себя новый инструмент «Migrate to Objective-C ARC» (в меню «Правка-> Рефакторинг»), который сделает это за вас. Вызов колллока - это отдельная история. Как упоминалось в комментариях, ссылка на clang гласит, что вы должны оставить свой метод dealloc:
Обоснование: даже несмотря на то, что ARC автоматически уничтожает переменные экземпляра, есть все еще законные причины для написания метода dealloc, например, освобождения ресурсов, не подлежащих сохранению. Неспособность вызвать [super dealloc] в таком методе - почти всегда ошибка.
Вы включаете ARC, используя новый флаг компилятора -fobjc-arc. ARC поддерживается в Xcode 4.2 для Mac OS X v10.6 и v10.7 (64-разрядные приложения) и для iOS 4 и iOS 5. (Слабые ссылки не поддерживаются в Mac OS X v10.6 и iOS 4). В Xcode 4.1 нет поддержки ARC.
-
Если я разрабатываю новое приложение для iOS 5 с использованием ARC, нужно ли мне выполнять какие-то проверки «ретро-совместимости»? Т.е. мне нужно будет проверить версию iOS и позвонить, сохранить и отпустить соответственно? Итак, в принципе, доступна ли ARC для всех версий iOS или только для iOS 5?
Нет, потому что ARC делает свое волшебство во время компиляции, а не во время выполнения.
Вместо того, чтобы вам приходилось помнить, когда использовать retain, release и autorelease, ARC оценивает требования к сроку службы ваших объектов и автоматически вставляет соответствующие вызовы методов для вас во время компиляции. Компилятор также генерирует подходящие методы dealloc для вас.
Дополнительная информация о ARC: http://clang.llvm.org/docs/AutomaticReferenceCounting.html
dealloc
, вы просто удаляете все своиrelease
и[super dealloc]
из него. А в 99,9%dealloc
просто высвобождает объекты, поэтому вы их удаляете. Но объектам по-прежнему приходится выполнять другие задачи по очистке, которые не выполняютсяrelease
(закрытие файлов, удаление наблюдателей и т. Д.).Q1: НЕТ, если у вас есть существующий код, вы можете продолжать использовать его как есть с -fno-objc-arc, вы можете выборочно отключить ARC для любого файла.
Если вы хотите отключить ARC для НЕСКОЛЬКИХ файлов:
Q2: НЕТ, цель может быть ниже, чем iOS 4.0
источник
Насколько я понимаю, и насколько мой iPhone / iPod работает под управлением iOS 5 и iOS 4.3 соответственно, все это довольно автоматически. Приложение, которое я запустил для 4.0 и которое «обновилось» для работы с Xcode для iOS 5.0, никогда не выдает никаких предупреждений о выпуске и сохранении, даже если оно встречается во всех разборках и т. Д. (скопировал файл) в новый проект, созданный с помощью Xcode для iOS 5, имеет много-много предупреждений. Похоже, вам не нужно удалять все эти вызовы, и нет, он каким-то образом автоматически адаптирует его для более старых версий. Профилируя мой iPod, я не вижу никаких утечек памяти или других признаков сбоя освобождения / освобождения. Это помогает?
источник
По этой части вашего вопроса
Следует отметить, что компилятор iOS 5 принимает «ретро-совместимость» (он фактически ДОБАВЛЯЕТ код, чтобы заставить сохранение / релиз работать, по сути), но если вы не компилируете для iOS 5.0, вы не можете использовать
weak
в качестве ключевого слова , Вместо этого вы используетеassign
. Это прискорбно:weak
это огромное преимущество (никаких висящих указателей, никогда!). Смотрите мой вопрос здесь для обсужденияweak
,assign
и АРК.источник
Если вы можете отключить ARC, не используя новый флаг компилятора -fobjc-arc, то вы не будете вынуждены переписывать код в будущем - я думаю (?)
источник