在 Objective-C 中,Block 本质上是一个 Objective-C 对象。根据 Block 在内存中的位置以及它是否捕获了外部变量,Block 主要分为三种类型: 1. (全局 Block) 2. (栈 Block) 3. (堆 Block) 下面详细解释这三种类型及其产生条件: --- 1. (全局 Block) 内存位置:数据区(Data Segment / .data 区),类似于全局变量。 产生条件: Block 内部没有访问任何外部的局部变量(自动变量)。 或者访问的是全局变量、静态变量(static)。 生命周期:与应用程序的生命周期相同,程序结束时才释放。 特点:对它进行 操作无效,仍然是全局 Block。 代码示例: --- 2. (栈 Block) 内存位置:栈区(Stack)。 产生条件: Block 内部访问了外部的局部变量(自动变量)。 且 该 Block 没有被强引用(在 ARC 下情况比较特殊,见下文)。 生命周期:由系统自动管理。作用域结束(大括号结束)时,Block 就会被销毁。 特点: 如果 Block 在栈上,一旦作用域结束,Bl...