闭包的逃逸
2017-05-31 本文已影响16人
初光夫
在swift3.0以前,一个函数的参数的闭包的捕捉策略是escaping,如果是一个非逃逸闭包,需要显示的添加声明@noescape。
简单的声明就是,如果闭包是函数结束前被调用就是非逃逸的noescape,如果这个闭包实在函数执行完后才被调用,调用的地方超过了这个函数的范围就是逃逸的escaping
在swift3.0之后,所有闭包默认为非逃逸的,即不需要声明@noescape,如果是逃逸闭包则需要声明@escaping
例如:masonry的闭包是在函数执行完之前会被调用即非逃逸的闭包 @noescape(默认的、不用声明)
网络请求的闭包是在数据返回之后才会执行即是逃逸的闭包@escaping(需要声明)