Sobes.tech
Назад к вопросам
Junior — Middle
66

Что такое потеря выделенной памяти и как она может возникнуть в приложении?

Компании, где спрашивали
DNSDNS
AvitoAvito

Ответ от нейросети

sobes.tech AI

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

Причины возникновения:

  • Циклические ссылки (retain cycles) между объектами, особенно при использовании ARC (Automatic Reference Counting).
  • Использование замыканий (closures) с захватом self без слабых ссылок (weak/self).
  • Неправильное управление ресурсами, например, неосвобождение делегатов.

Пример retain cycle с замыканием:

class ViewController {
    var closure: (() -> Void)?

    func setup() {
        closure = {
            print(self) // захват self без weak
        }
    }
}

Чтобы избежать, нужно использовать [weak self]:

closure = { [weak self] in
    guard let self = self else { return }
    print(self)
}

Регулярный анализ с помощью инструментов Xcode (Instruments — Leaks) помогает выявлять и устранять утечки памяти.