iOS必须Swift

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

2017-03-15  本文已影响112人  ZhengYaWei

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

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

上一篇下一篇

猜你喜欢

热点阅读