Утечка памяти (memory leak) — это ситуация, когда выделенная память более недоступна для использования программой (потеряны все ссылки на нее), но при этом она не была освобождена операционной системой.
Причины возникновения утечки памяти в iOS:
Циклические сильные ссылки (Retain Cycles): Два или более объекта ссылаются друг на друга сильными ссылками, предотвращая их деаллокацию, даже если на них больше нет внешних ссылок.
swift
Неправильное использование замыканий (Closures): Замыкание захватывает сильную ссылку на внешний объект (например, self), который владеет этим замыканием.
swift
Использование [weak self] или [unowned self] (unowned для случаев, когда объект, захватываемый замыканием, гарантированно живет дольше замыкания) предотвращает сильное захватывание.
Отсутствие отписки от наблюдателей/подписок: Объекты, подписанные на уведомления (NotificationCenter), KVO или другие механизмы обратного вызова, могут утекать, если они не отписываются во время деаллокации.
swift
Удержание ссылок в статических или глобальных переменных: Если объект удерживается сильной ссылкой из статической или глобальной переменной, он никогда не будет деаллоцирован.
Неправильное использование C-указателей и Core Foundation объектов: Manual memory management required when bridging Swift/Objective-C with C APIs or Core Foundation objects. Incorrect handling of retain, release, free functions can lead to leaks or crashes.
Утечки памяти со временем приводят к исчерпанию доступной памяти приложения, что может вызвать замедление работы или аварийное завершение программы из-за нехватки ресурсов.