Этот вопрос проверяет понимание различий между сборщиком мусора (Garbage Collector) и автоматическим подсчётом ссылок (ARC), включая их работу и влияние на производительность.
Garbage Collector периодически ищет и удаляет недостижимые объекты, что может вызывать паузы. ARC немедленно освобождает память, когда счётчик ссылок становится нулём, что более предсказуемо, но не handles циклические ссылки автоматически. ARC обычно быстрее, но требует внимания к циклам.
Оба механизма автоматически управляют памятью, но работают по-разному.
1. Garbage Collector (GC):
Периодически запускает процесс, который сканирует память и удаляет объекты, недостижимые из корневых ссылок.
Преимущества: Автоматически handles циклические ссылки.
Недостатки: Может вызывать паузы (stop-the-world), что неприемлемо для real-time приложений.
2. Automatic Reference Counting (ARC):
Вставляет вызовы retain и release во время компиляции, чтобы отслеживать количество ссылок на объект.
Память освобождается немедленно, когда счётчик становится нулём.
Преимущества: Нет пауз, более предсказуемое поведение.
Недостатки: Не handles циклические ссылки автоматически (требует weak или unowned).
Пример в Swift:
ARC используется по умолчанию. Для breaking cycles нужно использовать weak или unowned.