美文网首页iOS必须Swift
二十四、Swift3.0之@escaping与@non-esca

二十四、Swift3.0之@escaping与@non-esca

作者: ZhengYaWei | 来源:发表于2017-03-15 23:18 被阅读112次

@escaping:闭包的生命周期不在传入的函数范围内管理,就是说这个闭包是被持有了。在函数return后,闭包并不会被销毁,它被持有了。因为这个闭包要在异步请求回来后才执行,这时候函数已经return了,为了能执行,必须被其他对象持有。如在网络异步请求的时候,闭包一般是用@escaping修饰,因为封装好的网络请求,网络请求成功后,闭包要在控制器中进行回调,所以要用@escaping修饰。

@non-escaping:闭包在函数内执行完后,函数才返回,闭包销毁
总结:看到函数的闭包参数被声明为@escaping的时候,就要考虑self被循环引用的问题,要用unowned self或者weak self了;而如果是@non-escaping的话,就放心使用self吧,因为闭包在函数内执行,会释放被捕获的self。

相关文章

网友评论

    本文标题:二十四、Swift3.0之@escaping与@non-esca

    本文链接:https://www.haomeiwen.com/subject/hszrnttx.html