swift中escaping与noescaping之区别
Swift3之前
:
默认escaping,逃逸闭包,是不安全的。对于非逃逸闭包,你需要标记@noescaping
Swift3及之后
默认是noescaping,非逃逸的,默认是安全的:如果一个函数参数可能导致引用循环,那么它需要被escaping显示地标记出来.
一.具体区别
先举例说明。
1 声明testBlock
|
|
2 noescaping
|
|
3 escaping
|
|
4 调用
|
|
5 输出日志
|
|
二.总结
1.@escaping
会“逃逸”
通俗点来讲,这个闭包的作用域可能超过该函数的作用域,也就是说,该闭包在函数执行完成之后才被调用。
2.@noescaping
非逃逸
标明非逃逸的闭包的作用域是不会超过函数作用域的,我们不需要担心在闭包内持有self。