Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про IOS: memory, leak, cycle

Что такое утечки памяти? Как их находить и избегать?

Вопрос проверяет понимание проблемы утечек памяти в iOS, их причин, методов обнаружения и профилактики.

Короткий ответ

Утечка памяти происходит, когда объекты больше не нужны, но система не может их освободить, потому что на них остаются сильные ссылки. Частая причина — сильные ссылочные циклы (strong reference cycles), когда два объекта ссылаются друг на друга через сильные ссылки. Для поиска утечек используют Debug Memory Graph в Xcode и инструмент Leaks в Instruments. Чтобы избегать циклов, используют ключевые слова weak или unowned для создания слабых ссылок.

Длинный ответ

Утечка памяти (Memory Leak) — ситуация, когда память, выделенная под объект, не освобождается, даже если объект больше не используется приложением. Это может привести к исчерпанию памяти и аварийному завершению приложения.

Основная причина: Сильные ссылочные циклы
Цикл возникает, когда два объекта содержат сильные (strong) ссылки друг на друга, или когда замыкание захватывает сам объект, в котором оно определено, сильной ссылкой.

Пример цикла между объектом и замыканием:

class MyViewController: UIViewController {
    var closure: (() -> Void)?

    override func viewDidLoad() {
        super.viewDidLoad()
        // Замыкание захватывает `self` сильной ссылкой по умолчанию
        closure = {
            self.view.backgroundColor = .red // Сильная ссылка на `self`
        }
    }
    // Объект `MyViewController` удерживает замыкание `closure`,
    // а замыкание удерживает `MyViewController` -> цикл.
}

Решение: Использование слабых ссылок (weak или unowned)

closure = { [weak self] in // Захватываем self слабой ссылкой
    self?.view.backgroundColor = .red // Теперь self - опционал
}

Инструменты для поиска утечек:

  • Debug Memory Graph (Xcode): Показывает визуальный граф объектов в памяти. Утечки часто видны как неожиданно большие группы связанных объектов.

  • Instruments - Leaks: Специализированный инструмент, который в реальном времени отслеживает выделение памяти и точно указывает на места утечек.

  • Аватар

    iOS Guru

    Roman Isakov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    2

  • Сложность:

    8

Навыки

  • IOS

    IOS

Ключевые слова

#memory

#leak

#cycle

Подпишись на iOS Developer в телеграм

  • Аватар

    iOS Guru

    Roman Isakov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.