В iOS нет традиционного сборщика мусора. Вместо него используется механизм Automatic Reference Counting (ARC).
- Автоматический механизм: ARC автоматически подсчитывает сильные ссылки на объекты.
- Освобождение памяти: Когда количество сильных ссылок на объект становится равным нулю, ARC освобождает выделенную память.
- Предотвращение утечек: Правильное использование сильных, слабых и бесхозных (unowned) ссылок позволяет предотвращать утечки памяти и циклы сильных ссылок.
Типы ссылок в ARC:
- Сильная (strong): Увеличивает счетчик ссылок. По умолчанию.
- Слабая (weak): Не увеличивает счетчик ссылок. Автоматически становится
nil при деаллокации объекта. Используется для предотвращения циклов сильных ссылок. Объявляется как опциональный тип.
- Бесхозная (unowned): Не увеличивает счетчик ссылок. Гарантируется, что объект, на который она ссылается, существует в течение всего жизненного цикла бесхозной ссылки. Не является опциональной. Используется, когда два объекта имеют взаимную сильную связь, но один из них имеет более короткий жизненный цикл.
Преимущества ARC:
- Предсказуемость: Освобождение памяти происходит детерминированно, как только объект больше не используется.
- Производительность: Нет накладных расходов на фоновый сбор мусора, который может вызывать паузы (stalls).
- Простота: Разработчику не нужно вручную управлять памятью для большинства случаев, но необходимо понимать принципы ссылочного подсчета для предотвращения утечек.
Пример цикла сильных ссылок:
swift