Рекомендации по iOS 5 (отпустить / оставить?)

109

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

Девушка гик
источник
1
Используйте ARC и следуйте рекомендациям, изложенным здесь: amattn.com/2011/12/07/arc_best_practices.html Если вы сделаете это, вы обнаружите, что ARC «просто работает». Если вы не будете следовать этим правилам, у вас будут утечки, и вы потратите много времени на их отслеживание ....
n13

Ответы:

98

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


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

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

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

введите описание изображения здесь

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

sudo rm -rf
источник
15
Очевидно, что ARC можно отключить для отдельных файлов, что, возможно, позволит использовать устаревшие библиотеки ... Но я не играл с ним, поэтому пока не знаю. Хотя я очень рад этому. Можете ли вы представить себе мир, в котором разработчикам iOS не придется беспокоиться о сохранении / выпуске ?? О чем мы будем говорить здесь, в SO ?? ;-)
Дэн Рэй
45
Когда я наконец разобрался со всей этой ерундой, связанной с управлением памятью, они сделали это неактуальным. РАБОТА !!!
Kongress
@Dan: Ты не шутишь, его можно выборочно выключить? Дайте пожалуйста ссылку, это для меня важно! : D
sudo rm -rf
1
Я считаю, что компилятор сейчас не находится под соглашением о неразглашении, поэтому, чтобы выборочно исключить некоторые файлы (обычно сторонние исходные папки) из вашего кода, просто добавьте это как параметр компилятора к каждому файлу: -fno-objc-arc
blackjack75
2
@Yar: Да, это так. Хотелось бы, чтобы это было так просто, но, к сожалению, не все библиотеки так просты. Взять JSONKit, к примеру. Попробуйте выполнить это через проверку ARC. Вы поймете, что я имею в виду. ;)
sudo rm -rf
170

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

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

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

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

pixelfreak
источник
1
Когда я использую этот флаг с библиотекой, он работает, но как только я включаю файл lib .h в класс ARC, Xcode жалуется, как будто у меня там нет флага. Удалось ли вам заставить старые библиотеки работать с этим флагом?
Casey
Я могу заставить работать ASIHttpRequest и SBJson (я получаю 1 предупреждение об использовании структуры в Reachability.h). Я поставил флаг во всех файлах их реализации.
pixelfreak
Все файлы реализации или только .h? В моем разделе проекта Compile Sources есть только файлы заголовков, а не файлы реализации. Я могу добавить их, но, похоже , это не даст другого эффекта. Для справки, я пытаюсь заставить работать парсер REST. ( github.com/mirek/NSMutableDictionary-REST.framework )
Кейси
1
Ага! Я недостаточно внимательно изучил ошибки. Это разные ошибки, чем без флага. Мне просто пришлось удалить пул автозапуска из кода и что за!
casey
Когда я выбираю несколько файлов и нажимаю Enter, как было предложено здесь, все они были удалены из «Источников компиляции» на этапах сборки. Пришлось подбирать их индивидуально. Не уверен, что делаю что-то не так.
Гопалакришнан Субраманиан
10

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

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

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

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

Неванский король
источник
Будут ли приложения, разработанные с использованием iOS 5, работать со старыми iPhone?
Geekgirl
Вы сможете использовать инструменты для разработки под старые ОС, но не сможете использовать новые технологии, такие как ARC. Если вы хотите настроить таргетинг на более старые ОС, вам придется вручную управлять памятью. Если вы хотите использовать ARC, вам придется ограничить пользователей до iOS 5.
Nevan King
1
Ссылка на ARC находится на общедоступной странице Apple developer.apple.com/technologies/ios5, поэтому, по крайней мере, некоторые ее части не находятся под NDA.
cobbal
8
На самом деле это не совсем так. Вы можете создавать для iOS 4 с помощью ARC. Цитата инженера Apple: « Для iOS 4 и Mac OS 10.6 компилятор добавляет в ваше приложение немного связующего кода совместимости во время выполнения. Это работает для всех, кроме __weak переменных, которые требуют большей поддержки, чем может предоставить код совместимости. ARC на iOS 4 проще, чем код без ARC, но он не так прост, как ARC на iOS 5. «Кстати, приложение расписания WWDC было написано с помощью ARC и отлично работало на iOS 4!
sudo rm -rf
3
Ага; однако это было оговорено в докладе ARC, поскольку только цели 4.3.x получают «клей совместимости».
Алан Зейно
4

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

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

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

Dominic
источник
Будут ли приложения, разработанные с использованием iOS 5, работать со старыми iPhone?
Geekgirl
Он будет работать на iPhone под управлением iOS 5, поэтому только iPhone 3GS или iPhone 4. Я не верю, что он будет поддерживать iOS 4, но, опять же, это выполняется LLVM при компиляции, поэтому можно было бы создать двоичный файл для iOS 4 и 5. Я настоятельно рекомендую получить учетную запись разработчика iOS и поэкспериментировать с доступными параметрами.
Dominic
Как указывает sudo в своем комментарии к ответу nevan, вы действительно можете вернуться к iOS 4.0 с помощью ARC, поэтому более старые устройства, которые могут запускать эту ОС, совместимы с этим.
Брэд Ларсон
3

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

ThinkChris
источник
вы должны объяснить почему.
Джон Риселвато
3

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

Чарльз
источник
0

установить флаг как -fno-objc-arc в настройках проекта> Фазы сборки> Компилировать исходники

Мубин Шейх
источник