iOS 5 Best Practice (Release / retain?)


как начинающий программист iPhone, какова лучшая практика для написания приложений, которые будут использоваться либо с iOS 5, либо с более старыми версиями? В частности, должен ли я продолжать использовать выпуск/сохранение данных или я должен игнорировать это? Разве это имеет значение?

7 108

7 ответов:

Это зависит от вас. Вы можете писать приложения с помощью ARC (автоматический подсчет ссылок), а Xcode будет писать "код клея", чтобы ваши приложения с поддержкой ARC могли работать на iOS 4, никаких изменений не требуется. Однако некоторые вещи не будут работать, и наиболее заметно, что многие библиотеки, которые вы можете использовать, будут (иногда) выдавать бесчисленные ошибки, и вы не сможете их использовать, пока разработчики не выпустят обновление, совместимое с ARC.


Edit: Я недавно обнаружено, что вы можете отключить ARC на основе каждого файла. Смотрите pixelfreak ' s ответ. Итак, мой совет все еще стоит, но теперь сторонние библиотеки не должны обновляться для работы с ARC.

вот что Apple говорит об отказе от ARC для конкретных файлов:

при переносе проекта на использование ARC флаг компилятора-fobjc-arc имеет вид установите значение по умолчанию для всех исходных файлов Objective-C. Вы можете отключить Дуги для определенный класс, использующий флаг компилятора-fno-objc-arc для этот класс. В Xcode на вкладке целевые фазы сборки откройте компиляцию Группа источников для отображения списка исходных файлов. Дважды щелкните файл для которого вы хотите установить флаг, введите -fno-objc-arc во всплывающем окне панель, затем нажмите кнопку Готово.

enter image description here

Смотрите полное руководство по переходу здесь.

для тех, кому все еще интересно, Как отключить ARC на отдельных файлах, вот что я сделал:

  1. перейдите в настройки проекта, под Build Phases > Compile Sources
  2. Выберите файлы, которые вы хотите отключить ARC и добавить - fno-objc-arc флаги компилятора. Вы можете установить флаги для нескольких файлов в одном кадре, выбрав файлы, а затем нажав клавишу "Enter".

Я не знаю, если это рекомендуемый способ, но это работает для меня.

PS: I собрал эту информацию из clang.llvm.org здесь который является общедоступным, таким образом, не под NDA.

iOS 5 все еще находится под NDA и, вероятно, будет до тех пор, пока они не выпустят общедоступную версию. Если у вас есть учетная запись разработчика, перейдите к Форумы Разработчиков Apple и там спрашивай.

для предыдущих версий, вы должны подсчитать ссылки и сохранить и освободить соответственно. Проверьте руководство по управлению памятью.

Edit: здесь публичные спецификации для автоматического подсчета ссылок и цитата из публичная страница iOS 5:

автоматический подсчет ссылок (ARC) для Objective-C делает управление памятью задачей компилятора. Включив ARC с новым компилятором Apple LLVM, вам больше не нужно будет вводить retain или release, что значительно упростит процесс разработки, а также уменьшит сбои и утечки памяти. Компилятор имеет полное представление о ваших объектах и освобождает каждый объект в тот момент, когда он больше не используется, поэтому приложения работают так же быстро как всегда, с предсказуемой, плавной работы.

на данный момент детали легкие/под NDA, но Apple реализовала автоматический подсчет ссылок (ARC) в iOS 5, как описано здесь:http://developer.apple.com/technologies/ios5/

Если вы разрабатываете новое приложение в Xcode 4 с помощью iOS 5 SDK,вы можете безопасно игнорировать подсчет удержания/выпуска.

[edit] sudo rm-rf делает хороший момент; сторонние библиотеки могут быть значительно затронуты

никто не упомянул SystemConfiguration.рамки? Пожалуйста, не забудьте положить его в рамки. Я с несчастным видом потратил несколько часов, чтобы понять это.

Это, безусловно, выбор разработчика или команды. ARC (автоматический счетчик ссылок) сделал вещи немного проще, автоматически управляя памятью для вас. Он будет освобождать, сохранять и освобождать, когда это необходимо. Я считаю, что вы должны получить опыт управления памятью самостоятельно предпочтительно в тестовом приложении, если вы еще этого не сделали. Еще одна вещь, которую следует учитывать, зависит ли ваше приложение от сторонних библиотек, которые если не преобразованы в ARC предотвратит компиляцию вашего приложения. Выбор, очевидно, зависит от ситуации.

установить флаг как-fno-objc-arc в настройках проекта>этапы сборки > компиляция источников