块(Blocks)是由
LLVM提出的非标准C语言扩展,可应用于
Objective-C与C 中,语法类似于由大括号包裹的闭包。苹果设计该特性旨在简化基于Grand Central Dispatch(
GCD)线程结构的程序开发,但块本身独立于GCD架构,也可在其他程序中类似普通语句块使用,其作为GCD任务分发的核心单元通过队列执行代码块实现多线程调度。块支持参数传递、私有变量声明及__block关键字标记的闭包变量捕获,生成包含代码引用和局部变量快照的不透明值。其调用方式与函数指针一致,可通过Block_copy运算符在定义域外保留,外表与GCC的嵌套函数相似但具备跨作用域调用能力。该特性最初由苹果在苹果修改版的GCC编译器以及Clang LLVM编译器前端实现,LLVM计划包括支持块特性的运行时库,并作为C1x标准提案提交至C标准委员会。