二十四、Swift3.0之@escaping与@non-escaping区别(仅自己当笔记使用)

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容