Junior
59
questionbank

Что такое утечка памяти и как она возникает?

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech

Утечка памяти (memory leak) — это ситуация, когда выделенная память более недоступна для использования программой (потеряны все ссылки на нее), но при этом она не была освобождена операционной системой.

Причины возникновения утечки памяти в iOS:

  1. Циклические сильные ссылки (Retain Cycles): Два или более объекта ссылаются друг на друга сильными ссылками, предотвращая их деаллокацию, даже если на них больше нет внешних ссылок.

    swift
  2. Неправильное использование замыканий (Closures): Замыкание захватывает сильную ссылку на внешний объект (например, self), который владеет этим замыканием.

    swift

    Использование [weak self] или [unowned self] (unowned для случаев, когда объект, захватываемый замыканием, гарантированно живет дольше замыкания) предотвращает сильное захватывание.

  3. Отсутствие отписки от наблюдателей/подписок: Объекты, подписанные на уведомления (NotificationCenter), KVO или другие механизмы обратного вызова, могут утекать, если они не отписываются во время деаллокации.

    swift
  4. Удержание ссылок в статических или глобальных переменных: Если объект удерживается сильной ссылкой из статической или глобальной переменной, он никогда не будет деаллоцирован.

  5. Неправильное использование 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.

Утечки памяти со временем приводят к исчерпанию доступной памяти приложения, что может вызвать замедление работы или аварийное завершение программы из-за нехватки ресурсов.