Вступление можно и не читать.
За последние полгода разработки под apple устройства постоянно натыкаюсь на то, что мало кто из знакомых коллег понимает новую технологию работы с памятью в XCode. Мне и самому не до конца понятно как там все закручено, но все таки некоторые моменты постараюсь описать, заодно сам разберусь что к чему. Все картинки и примеры приведены для XCode 4.2.1 (4D502). Для тех кто в танке, ARC - Automatic Reference Counting. Итак поехали.
О чем речь?
ARC - встроенная в компилятор LLVM технология, которая совмещает прелести автоматического сборщика мусора GC и высокую скорость работы ручного управления памяти (retain/release). Работа с ARC напоминает работу на языке программирования со встроенным сборщиком мусора. Теперь почти не надо заботиться об утечках памяти, не нужно помнить и просчитывать когда отпускать/захватывать переменную и не надо помнить об assign свойствах. Кода становится меньше, а стабильность и скорость выполнения программы увеличивается. Все это стало возможным благодаря компилятору LLVM. На этапе предкомпиляции LLVM сам вставляет в нужных местах retain, release и autorelease. Естественно необходимо следовать некоторым правилам, чтобы ARC сработал корректно и не добавлял лишних операция с циклическими ссылками. О правилах я напишу в следующий раз. И что самое потрясающее - на надо выкидывать старый код программы. Можно постепенно внедрить в него технологию ARC, так что пользователи и заказчики вообще ничего не заметят. Резюмируя все вышесказанное:
Главные прелести ARC
- Не надо использовать retain и release ВООБЩЕ!!!
- ARC не создает дополнительных поток для удаления мусора
- Легко понять принципы, если не вдаваться в детали
- LLVM делает серьезную оптимизацию кода, после чего программа работает даже быстрее, чем с ручным управлением памяти.
- Есть инструменты для постепенного внедрения ARC в существующую программу
- Появились крайне полезные слабые связи для свойств. Раньше это было доступно только для переменных.
- Меньше EXC_BAD_ACCESS вылетов. Программа работает стабильнее и быстрее
- Другие плюшки по вкусу…
Как включить?
Xcode версии 4 и выше поумолчанию использует компилятор LLVM, который в свою очередь тянет за собой использование ARC. На картинке показано какой флаг включает ARC.
продолжение скоро будет