Карточка Senior Замыкания и захват обновлено

Почему non-escaping замыкания дешевле

Вопрос

Что даёт компилятору то, что замыкание non-escaping?

Попробуйте сами

Ответьте про себя или вслух, потом откройте ответ и сверьтесь.

Показать ответ и разбор

Коротко

Контекст можно разместить на стеке без выделения в куче и без подсчёта ссылок, а захваченные переменные не боксить. Ещё компилятор не требует явного self и может инлайнить вызов.

Ответ

Контекст можно разместить на стеке без выделения в куче и без подсчёта ссылок, а захваченные переменные не боксить. Ещё компилятор не требует явного self и может инлайнить вызов.

Разбор

Поэтому non-escaping сделали значением по умолчанию в Swift 3. withoutActuallyEscaping позволяет временно использовать non-escaping замыкание там, где тип требует escaping.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.