> Что такое capture list в closure и как с ним работать (iOS, Swift)
Уровень: junior · Роль: mobile · Категория: Технические вопросы
Компании: Masterdata
Стек: iOS, Swift
> Пример ответа
Capture list в closure (замыкании) в Swift - это механизм, который определяет, как замыкание захватывает и хранит ссылки на переменные и константы из окружающего контекста. Он указывается в квадратных скобках [ ] перед списком параметров замыкания.
Основные правила работы:
- По умолчанию замыкание захватывает переменные как strong reference (сильная ссылка), что может привести к retain cycle (циклу сильных ссылок), особенно при захвате
selfвнутри класса. - Capture list позволяет изменить способ захвата:
[weak self]создает слабую ссылку (optional),[unowned self]- бесхозную (non-optional, но может вызвать crash при обращении к освобожденному объекту). - Можно захватывать несколько переменных:
[weak self, weak delegate]. - Для value-типов (struct, enum) capture list не нужен, так как они копируются, но можно явно указать
[weak]для ссылочных типов внутри них.
Пример использования:
SWIFTclass ViewController {var closure: (() -> Void)?func setupClosure() {// Без capture list - retain cycleclosure = { [weak self] inguard let self = self else { return }print(self.view.frame)}}}
В этом примере [weak self] предотвращает цикл, так как замыкание не удерживает self сильно. Всегда используйте weak для self в замыканиях, которые могут жить дольше, чем объект, или при асинхронных операциях.
> Похожие задачи по mobile
Как работает get в Map
Какие типы данных относятся к стеку, а какие к куче
Что должна возвращать функция сравнения
Как реализовать потокобезопасный словарь
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью