Swift 3 @escaping


这两个别混淆,实际上也很难混淆,就理解就可以了。因为他们都是存在不同的swift 版本里面。

swift 2 的时候用@noescape, 在swift 3就被移除了。并且引入了@escaping.

他们两个都是什么意思呢?

###escaping 闭包是什么? (@escaping)

也就是给一个函数传递一个闭包参数并且函数返回之后才被调用,那么这个闭包就是在escaping。也叫闭包参数excapes了这个函数体。这就是escaping闭包,用的都是ing你可以体会下,不得不说真是很合理啊…!

Swift2你可以用@noescape定义一个函数参数,告诉编译器传递到函数参数的闭包不能escapes函数体。默认的情况下是escape的,所以闭包前面通常什么也不用加也不会有错误提示。

@noescapeswift3里面虽然移除了但是却是默认属性。也就是默认的情况下是不escape函数体。所以@noescape已经deprecated了,所以你就别用就对了。

@escaping 也用在参数类型前面,不像swift2 用在参数名前。

默认non-escaping有很多好处,编译器能更好的优化你代码。如果编译器知道一个闭包是non-escaping,很多内存管理的本质的细节都会很好的处理。

还有一个就是在non-escaping的闭包里用self都没有问题,因为闭包是在函数返回之前被调用的。所以闭包里面就不需要用弱引用self了。



Previous: IOS 分析crash log
Next: Git更改远程仓库名字

Comments

comments powered by Disqus

© Copyright 2017 William Hu