[Разработка под iOS, Objective C, Swift] Memory Management: ARC vs MRC в iOS
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Как работает Automatic Reference Counter в iOS? На самом деле эту тему мне было легче понять после того, как я познакомился с Manual Reference Counter. Это очень простая статья, которая помогает базово понять как работает управление памятью в iOS.Для управления памятью в iOS есть несколько инструментов:MRC - Manual Reference CounterMRC - это ручное управление ссылками через код. В самом начале и в доисторические времена разработчики сами управляли подсчетом ссылок через команды. Было это, мягко говоря, жестко:
- alloc - создание объекта (создаем ссылку)
- retain - обращение к нему (+1 к ссылке)
- release - уменьшаем счетчик ссылок (-1)
- dealloc - если счетчик ссылок равен 0 = выгрузка из памяти
По сути, вы выделяете объект, сохраняете его в какой-то момент, а затем отправляете один выпуск для каждого отправленного вами выделения / сохранения. Метод dealloc вызывается для объекта, когда он удаляется из памяти.
Проблемы:
- Нужно постоянно считать retain, release
- крэш при обращении из выгруженного из памяти
- забыли поставить релиз - утечка памяти
ARC - Automatic reference counterПосле того, как умные программисты поняли, что можно придумать механизм, который сам за программиста считает ссылки - мир в iOS поменял. Больше не нужно было считать ссылки и следить за ними. За нас это делает ARC автоматически. Он сам понимает куда и зачем что вставлять и когда удалять. Стоит понять, ЧТО ARC РАБОТАЕТ ПРИ КОМПИЛЯЦИИ, А ПОДСЧЕТ ССЫЛОК В РАНТАЙМЕ.Что изменилось?
- (release/retain - нельзя вызывать) dealloc - работает частично
- properties change - weak/strong
У property появились модификаторы:
- strong - аналог retain
- weak - аналог assign. в проперти при освобождении ставится нил и не крэшит приложение при обращении
Но есть и минусы, с которыми не справляется ARC:
- Retain cycle - это когда объем выделенного пространства в памяти не может быть освобожден из-за циклов сохранения. Поскольку Swift использует автоматический подсчет ссылок (ARC), цикл сохранения происходит, когда два или более объекта содержат сильные ссылки друг на друга. В результате эти объекты сохраняют друг друга в памяти, потому что их счетчик сохранения никогда не уменьшится до 0, что предотвратит вызов функции deinit и освобождение памяти
Решение банальное - сделать одну из ссылок слабой.Эта статья является больше базовой и ознакомительной с основами memory management в iOS, для легкого концептуального понимания.
===========
Источник:
habr.com
===========
Похожие новости:
- [Swift] The Layout Engine в Swift
- [] Открытые материалы: курс по вычислительной нейронауке
- [Разработка под iOS, Законодательство в IT, Игры и игровые приставки, IT-компании] Apple удалила 46 тысяч приложений из китайского App Store
- [Алгоритмы, Swift] Linked List: Когда нужно писать свой Copy-on-write в iOS?
- [Информационная безопасность] (не) Безопасный дайджест: новые мегаутечки и один пароль на всех
- [Системное администрирование, Разработка под iOS, Разработка под MacOS] 1008F — или как раскирпичить свой Mac
- [Высокая производительность, Администрирование баз данных, Big Data, Визуализация данных] Что под капотом у BI? Детальный разбор технологии In-Memory OLAP
- [Разработка под iOS, Разработка мобильных приложений, Разработка под Android, Тестирование мобильных приложений] 3 видео для мобильного разработчика
- [Программирование, Разработка под iOS, Разработка мобильных приложений, Swift] Приложение на SwiftUI в AppStore – сложности разработки
- [JavaScript, Google Chrome, Расширения для браузеров, Хранение данных, Хранилища данных] Использование Redux в MV3 расширениях Chrome (перевод)
Теги для поиска: #_razrabotka_pod_ios (Разработка под iOS), #_objective_c, #_swift, #_swift, #_arc, #_memory, #_razrabotka_pod_ios (
Разработка под iOS
), #_objective_c, #_swift
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 23-Ноя 04:58
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Как работает Automatic Reference Counter в iOS? На самом деле эту тему мне было легче понять после того, как я познакомился с Manual Reference Counter. Это очень простая статья, которая помогает базово понять как работает управление памятью в iOS.Для управления памятью в iOS есть несколько инструментов:MRC - Manual Reference CounterMRC - это ручное управление ссылками через код. В самом начале и в доисторические времена разработчики сами управляли подсчетом ссылок через команды. Было это, мягко говоря, жестко:
Проблемы:
=========== Источник: habr.com =========== Похожие новости:
Разработка под iOS ), #_objective_c, #_swift |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 23-Ноя 04:58
Часовой пояс: UTC + 5