iOS 5 Best Practice (випуск / збереження?)


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 на вкладці Цільові фази збірки відкрийте групу Compile Sources, щоб відкрити список вихідних файлів. Двічі клацніть файл, для якого потрібно встановити прапор, введіть -fno-objc-arc на спливаючу панель, а потім натисніть Готово.

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

Повний посібник з переходу дивіться тут .


15
ARC, очевидно, може бути вимкнено на основі "за файлом", можливо, дозволяючи використовувати застарілі бібліотеки ... Але я не грав з цим, тому не знаю поки. Я дуже схвильований про це, хоча. Чи можете ви уявити собі світ, де розробникам iOS не доведеться потіти / випустити ?? Про що ми будемо говорити тут у SO ?? ;-)
Dan Ray

45
Тільки тоді, коли я нарешті добре розібрався з усіма такими лайнами управління пам’яттю, і тоді вони роблять це неактуальним. РОБОТИ !!!
Конгресс

@Dan: Ви не жартуєте, що це можна вибірково вимкнути? Будь ласка, дайте посилання, що для мене важливо! : D
sudo rm -rf

1
Я вважаю, що компілятор зараз не під NDA, щоб вибірково виключити деякі файли (як правило, сторонні папки-джерела) з вашого коду, просто додайте це як параметр компілятора до кожного файлу: -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.


1
Коли я використовую цей прапор із бібліотекою, він працює, але як тільки я включаю файл lib .h у клас ARC класу ARC, скаржиться так, ніби у мене його немає. Чи змогли ви змусити старших бібліотек працювати з цим прапором?
Кейсі

Я в змозі змусити ASIHttpRequest і SBJson працювати (я отримую 1 попередження про використання структури в Reachability.h). Я розміщую прапор у всіх файлах їхньої реалізації.
pixelfreak

Усі файли реалізації або лише .h's? У моєму розділі "Збірник джерел" у проекті є лише файли заголовків, а також файли реалізації. Я можу їх додати, але, схоже , це не має іншого ефекту. Для довідки, я намагаюся примусити REST-аналізатор працювати. ( github.com/mirek/NSMutableDictionary-REST.framework )
casey

1
Ага! Я не придивився уважно до помилок. Вони різні помилки, ніж без прапора. Мені просто довелося видалити пул автоматичних випусків з коду і wha-la!
Кейсі

Коли я вибираю кілька файлів і натискаю клавішу enter, як було запропоновано тут, усі вони були видалені із "Compile source" у фазах збірки. Доводилося вибирати їх індивідуально. Не впевнений, чи роблю я щось не так.
Супраманійський Гопалакришнан

10

iOS 5 все ще знаходиться під NDA, і, ймовірно, буде доти, доки вони не випустять публічну версію. Якщо у вас є обліковий запис розробника, зайдіть на Форуми розробників Apple і запитайте його.

Для попередніх версій вам потрібно порахувати посилання та зберегти та випустити відповідно. Перегляньте посібник з управління пам’яттю .

Редагувати: Ось загальна специфікація для автоматичного підрахунку довідок та цитата з загальної сторінки iOS 5 :

Автоматичний підрахунок посилань (ARC) для Objective-C робить управління пам’яттю завданням компілятора. Увімкнувши ARC за допомогою нового компілятора Apple LLVM, вам більше ніколи не потрібно буде вводити файл зберігання чи випуск, значно спрощуючи процес розробки, зменшуючи при цьому збої та витоки пам'яті. Компілятор має повне розуміння ваших об'єктів і випускає кожен об'єкт миттєво, коли він більше не використовується, тому програми запускаються так само швидко, як ніколи, з передбачуваною плавною роботою.


Чи будуть програми, розроблені за допомогою iOS 5, працювати зі старими айфонами?
Geekgirl

Ви зможете використовувати інструменти для розробки для старих ОС, але ви не зможете використовувати нові технології, такі як ARC. Якщо ви хочете націлити на старі ОС, вам доведеться зробити вручну керування пам'яттю. Якщо ви хочете використовувати ARC, вам доведеться обмежити користувачів iOS 5.
nevan king

1
Посилання на ARC міститься на загальнодоступній сторінці Apple developer.apple.com/technologies/ios5, тому принаймні деякі її частини не належать до NDA.
кабал

8
Насправді це не зовсім так. Ви можете створити для iOS 4 за допомогою ARC. Цитата від інженера Apple: " Для iOS 4 та Mac OS 10.6 компілятор додає у ваш додаток трохи клейового коду для сумісності з виконанням часу. Це працює для всього, крім __слабких змінних, які потребують більшої підтримки, ніж може забезпечити код сумісності. ARC на iOS 4 простіше, ніж не-ARC-код, але він не такий простий, як ARC на iOS 5. "До речі, додаток графіку WWDC було написано з ARC, і воно працювало на iOS 4 просто чудово!
sudo rm -rf

3
Так; однак це було кваліфіковано на розмові ARC як лише 4.3.x цілі отримують "клей сумісності".
Alan Zeino

4

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

Якщо ви розробляєте новий додаток у Xcode 4 за допомогою iK 5 SDK, можете сміливо ігнорувати підрахунок збереження / випуску.

[редагувати] sudo rm -rf робить хороший момент; можуть бути значно постраждали сторонні губи


Чи будуть програми, розроблені за допомогою iOS 5, працювати зі старими айфонами?
Geekgirl

Він буде працювати на айфонах під управлінням iOS 5, тому лише iPhone 3GS або iPhone 4. Я не вірю, що він буде підтримувати iOS 4, але знову ж таки, це робиться LLVM при компіляції, тому можливо створити бінарний файл для iOS 4 і 5. Настійно рекомендую отримати обліковий запис розробника iOS та пограти з наявними опціями.
Домінік

Як судо вказує у своєму коментарі до відповіді Невана, ви дійсно можете орієнтуватися на iOS 4.0 за допомогою ARC, тому старі пристрої, які можуть працювати з цією ОС, сумісні з цим.
Бред Ларсон

3

Ніхто не згадав SystemConfiguration.framework ? Будь ласка, не забудьте помістити його в рамки . Я з жалем витратив кілька годин, щоб усвідомити це.


ви повинні пояснити, чому.
Джон Різельвато

3

Безумовно, це вибір розробника чи команди. ARC (автоматичний лічильник довідок) полегшив роботу, автоматично керуючи пам'яттю. Він вивільняє, зберігає та розмовлятиме, коли це доречно. Я вважаю, що ви повинні отримати досвід управління пам'яттю самостійно, бажано, в тестовій програмі, якщо ви ще цього не зробили. Ще слід врахувати, чи покладається ваша програма на сторонні бібліотеки, які, якщо не перетворені на ARC, не дозволять вашій програмі збиратись. Вибір, очевидно, залежить від ситуації.


0

встановити прапор як -fno-objc-arc в налаштуваннях проекту> Фази збірки> Компілювати джерела

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.