Что такое ARC(Automatic Reference Counting)?

Тема про управление памятью — излюбленная тема на собеседовании. В этой статье мы рассмотрим два подхода управления памятью: ARC и MRC.

MRC — Manual Reference Counter (ручное управление счетчиком ссылок)

Каждый объект содержит некий счетчик, отображающий количество объектов, которые на него ссылаются (ссылки). При равенстве счетчика нулю — объекты освобождаются из памяти.

В ситуации, когда объект освобождается, но счетчик ссылок остался не равен нулю, два объекта содержат сильные ссылки друг на друга, получается цикличность ссылок (retain cycle) — об этом я уже писал в статье Retain Cycle.

До 2011 года IOS разработчики сами управляли подсчетом ссылок на объект с помощью кода. Вот как это выглядело:

  • alloc — возвращает новый экземпляр класса (создаем ссылку на объект). Счетчик ссылок = 1.
  • retain — увеличивает счетчик ссылок (+1 к ссылке).
  • release — уменьшает счетчик ссылок (-1 к ссылке).
  • dealloc — выгружает память, если счетчик ссылок равен 0.

После каждого объявления объекта [NSObject alloc], счетчик ссылок устанавливается в 1. [instance retain] увеличивает счетчик на 1, а [instance release] уменьшает его на 1. Объект удаляется, когда этот счетчик достигает 0.

ARC — Automatic Reference Counting (автоматический подсчет ссылок)

Алгоритм разрабатывался для устранения недостатков ручного управления счетчиком ссылок ввиду наличия достаточного количества ошибок.


ARC отличается от MRC тем, что компилятор сам расставляет методы retain/release за программиста. Важно понимать, что ARC работает при компиляции, а подсчет ссылок — в рантайме.

Изменения в Automatic Reference Counting

  • Retain/release больше нельзя вызывать для увеличения/уменьшения ссылок
  • У объектов появились свойства weak/strong. Weak — аналог assign, strong — аналог retain.

Что не удалось автоматизировать?

  • Retain Cycle. Проблемы с утечкой памяти, которые происходят в MRC, так и остались в ARC.

Больше информации:

Выразить благодарность или найти уникальный материал вы можете в boosty.

Подписывайтесь на мой Telegram-канал iOS Interview Channel, чтобы не пропустить новый материал.


2 thoughts on “Что такое ARC(Automatic Reference Counting)?”

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *