Escaping closure



🟢lvl: jun




Это замыкание, которое может пережить область блока кода, в который оно передается. По-умолчанию наши функции будут non-escaping, но если клоужер сохранен в другом блоке кода или запущен позже в других замыкания, то компилятор потребует выставить маркер escaping.



Чтобы наш клоужер мог "убежать" мы можем:

1️⃣ Отправить выполняться клоужер в другой очереди в многопоточности. Ну, или в той же, но ассинхронно

2️⃣ Хранение замыкания за пределами функции.



🅰️ Почему важно знать, что такое убегающее замыкание?



Еscaping closure может привести к reference cycle, если мы не используем weak, unowned ссылки для захвата сильных ссылок.



#lvl_jun