Зачем нужен модификатор @escaping для замыканий?
Как избежать утечек памяти при работе с escaping-замыканиями?
В чём разница между escaping и non-escaping замыканиями?
Специализация
Python Backend Developer
Java Backend Developer
Node.js Backend Developer
Golang Backend Developer
React Frontend Developer
Выберите навыки
React
JavaScript
Git
Redux
Webpack
Сложность
1-3
4-6
7-8
9-10
Рейтинг вопросов
1
2
3
4
5
Подпишись на React Developer в телеграм
Рейтинг:
2
Сложность:
6
Если замыкание сохраняется вне тела функции (например, присваивается свойству или ставится в очередь), то оно «убегает» из области и выполняется позже — такое замыкание помечают @escaping. Это даёт понять компилятору, что нужно захватить переменные должным образом и управлять временем жизни замыкания.
Рейтинг:
2
Сложность:
6
В escaping-замыканиях захват self по умолчанию сильный, что может привести к retain-циклу. Чтобы избежать, используют [weak self] или [unowned self] в capture-list, проверяют self в блоке и корректно обрабатывают его отсутствие.
Рейтинг:
2
Сложность:
7
Non-escaping замыкания выполняются сразу внутри функции. Escaping замыкания сохраняются и вызываются позже, например, после завершения асинхронной операции. Escaping требует явной аннотации @escaping.