Вопрос проверяет понимание принципов работы ARC и осознание того, почему автоматическое управление памятью не избавляет от всех проблем.
ARC автоматически управляет счетчиком ссылок, но не понимает логику программы. Он не может сам обнаружить циклические зависимости. Если объекты удерживают друг друга, память не освобождается. Такие утечки накапливаются и ухудшают работу приложения. Поэтому за памятью нужно следить вручную.
Наличие ARC часто создает ложное ощущение, что проблема памяти полностью решена, но это не так.
ARC (Automatic Reference Counting) автоматически:
увеличивает счетчик ссылок при создании сильной ссылки
уменьшает счетчик при удалении ссылки
освобождает объект, когда счетчик становится равен нулю
ARC работает строго по формальным правилам, не анализируя смысл связей.
ARC не понимает циклы
Если два объекта держат друг друга сильными ссылками, их счетчики никогда не станут равны нулю.
ARC не может разорвать такую связь автоматически.
Асинхронный код
Замыкания могут удерживать self дольше, чем ожидается.
Особенно часто это происходит в сетевых запросах и анимациях.
Долгоживущие объекты
Singleton, кэши и менеджеры могут случайно удерживать UI-объекты.
Незаметное накопление проблем
Утечка может быть маленькой, но повторяться десятки раз.
Со временем приложение начинает потреблять все больше памяти.
рост потребления памяти
снижение производительности
риск завершения приложения системой
ARC снимает рутину управления памятью, но ответственность за архитектуру ссылок и отсутствие циклов остается на разработчике.