知识卡片

闭包捕获值延长了变量的生命周期

专业/工作 · 714

内容

闭包会把它引用到的外部变量”捕获”进自己内部一并保存,即使定义这个变量的外层函数已经执行完毕、正常情况下这个变量本该被销毁,只要还有闭包持有对它的引用,这个变量就会继续存活,后续每次调用闭包都能读到、改到同一份状态(如用闭包实现一个自带计数器的累加函数,每次调用累加的都是上一次的结果而非重新从零开始)。发散:这本质是把”变量的生命周期”从”跟着作用域走”变成了”跟着持有它的闭包走”,是很多语言里用闭包实现私有状态、单例式计数器、防抖节流函数的底层原理。

参考来源

《Swift全解析:新式iOS实战开发》第8章《Swift闭包》