## Automatic Reference Counting/Автоматический подсчет ссылок

1. [Understanding Swift Copy-on-Write mechanisms](https://habr.com/ru/articles/209288/)

"Automatic Reference Counting (ARC) is a memory-management implementation in the Clang compiler for the Objective-C and Swift programming languages"

> Работа ARC - на этапе компиляции приложения в компилируемый код за программиста автоматически расставляет в нужных местах 
release (декремент - уменьшает счетчика ссылок)
retain (инкрементирует - увеличивает счетчик ссылок)
autorelease (добавляет экземпляр в autorelease pool для  вызова отложенного декремента deferred release). 

Этот механизм работает только для объектов, которые хранятся в [куче](/3%20Memory%20and%20Concurrency/3.1%20Memory/3.1.2%20RandomAccessMemory/3.1.2.3%20Heap.md) ([ссылочные типы](/5%20Swift/5.3%20DataRepresentations/5.3.1%20DataTypes/5.3.1.3%20ReferenceTypes/)).

❗❗ ARC РАБОТАЕТ ПРИ КОМПИЛЯЦИИ, А ПОДСЧЕТ ССЫЛОК В РАНТАЙМЕ

### ARC vs [Garbage collector](../3.1.3.2%20GarbageCollector.md)

ARC не занимается автоматическим освобождением не запускает никаких фоновых процессов. 

GC работает во время выполнения программы (runtime) с помощью кода, который периодически запускается и проверяет объекты в фоновом процессе. ARC работает во время компиляции и вставляет retain и release автоматически в код. Часто это сказывается на производительности, потому что процесс сборки мусора должен выяснить, какую память удалить («пометить и очистить»).

---

[3.1.3 Reference Count Theme Folder](../3.1.3.1%20RefCountIniOS/) | [Back To iTWiki Contents](https://github.com/eldaroid/iTWiki) | [3.1.3.1.2 MRC Theme](./3.1.3.1.2%20MRC.md)
