Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про IOS: retain, cycle, viper

Почему в VIPER возникает циклическая ссылка?

Вопрос проверяет понимание управления памятью в iOS и особенностей связей между компонентами VIPER.

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

Циклическая ссылка в VIPER возникает из-за взаимных сильных ссылок между объектами. Чаще всего это происходит между View и Presenter. View хранит Presenter, а Presenter — View. Если обе ссылки сильные, объекты не освобождаются из памяти. Это приводит к утечкам памяти.

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

Циклические ссылки — одна из самых частых проблем при реализации VIPER.

Что такое retain cycle

Retain cycle — ситуация, при которой два или более объекта удерживают друг друга сильными ссылками и не могут быть освобождены ARC.

Почему VIPER подвержен этой проблеме

VIPER состоит из нескольких взаимосвязанных компонентов:

  • View

  • Presenter

  • Interactor

  • Router

Между ними активно используются ссылки, и при неправильной настройке они легко образуют цикл.

Классический пример

Наиболее частый цикл:

  1. View хранит Presenter (strong)

  2. Presenter хранит View (strong)

class ViewController {
    var presenter: Presenter
}

class Presenter {
    var view: ViewController
}

ARC не может освободить ни один объект.

Где ещё возможны циклы

  • Presenter ↔ Interactor

  • Presenter ↔ Router

  • замыкания внутри Presenter или Interactor

Особенно опасны замыкания без [weak self].

Почему это критично

  • экран не деинициализируется

  • растёт потребление памяти

  • сложно отлаживать

Вывод

VIPER сам по себе не создаёт retain cycle, но из-за большого количества связей требует строгой дисциплины работы с weak и unowned ссылками.

  • Аватар

    iOS Guru

    Roman Isakov

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

Уровень

  • Рейтинг:

    5

  • Сложность:

    6

Навыки

  • IOS

    IOS

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

#retain

#cycle

#viper

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

  • Аватар

    iOS Guru

    Roman Isakov

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