@escaping
在Swift中,@escaping
是一个属性关键字,用于标记闭包参数。当一个闭包在函数返回之后才被调用时,这个闭包被称为逃逸闭包(Escaping Closure)。使用@escaping
关键字可以告诉Swift编译器,传递给函数的闭包可能会在函数执行完毕后被调用,因此它需要“逃逸”函数的作用域
在Swift 3.0之前,@noescape
被用来标记闭包,表示闭包会在函数返回之前调用完成,不会逃逸28。但是在Swift 3.0中,@noescape
被移除,所有闭包默认为非逃逸(non-escaping),如果闭包需要逃逸,必须显式地使用@escaping
标记2831。
使用@escaping
时,Swift编译器会强制开发者在闭包内部使用self
,以避免可能的循环引用问题31。这是因为逃逸闭包可能会被存储并稍后执行,这增加了闭包捕获并持有外部上下文的生命周期,包括self
的强引用,从而可能导致内存泄漏31。
总结来说,@escaping
关键字用于:
self
。
PreferenceKey