知识卡片
逃逸闭包与非逃逸闭包的权衡
内容
函数参数里的闭包默认是非逃逸的:函数一旦执行结束,这个闭包连同它捕获的[[闭包捕获变量脱离作用域仍有效|捕获变量]] 就会一起销毁,不能被带到函数外部继续使用;这样编译器能在编译期确定闭包的生命周期严格 被函数调用包住,省去额外的内存管理开销。但异步场景(如网络请求完成后的回调)恰恰需要 闭包活得比函数调用本身更久,这时必须显式声明为逃逸闭包,让系统为它单独分配、延长内存 生命周期。发散:默认非逃逸、按需开逃逸,是”性能优先,特例显式声明”的设计倾向——把常见 情况的开销降到最低,把额外成本转嫁给真正需要它的少数场景。
参考来源
《Swift 4从零到精通iOS开发》第5章《函数与闭包技术》