在 Objective-C 中,Block 是一个封装了函数调用以及函数调用环境的 Objective-C 对象。Block 对变量的“截获”(Capture)机制取决于变量的类型。 主要分为以下几种情况: 1. 局部变量(Automatic Variables) 这是最常见的情况(例如在方法内部定义的 )。 截获方式:值截获 (Value Capture) 机制: Block 在创建时,会将局部变量的当前值复制一份到 Block 的结构体内部。 特点: Block 内部持有的是变量的副本。 只读: 在 Block 内部不能修改该变量的值(编译器会报错),因为修改副本不会影响外部变量,逻辑上容易造成混淆。 时机: 截获的是 Block 定义时刻的值,而不是调用时刻的值。 2. 静态局部变量(Static Local Variables) 在方法内部用 修饰的变量。 截获方式:指针截获 (Pointer Capture) 机制: Block 内部持有该变量的内存地址(指针)。 特点: 可读写: 因为持有的是地址,所以在 Block 内部可以修改变量的值,且会影响外部。 同步: 外部...