修饰符是 Objective-C 中 Block 编程的一个核心概念。它的主要作用是允许 Block 内部修改外部定义的局部变量,并且处理变量在内存中的生命周期管理。 以下是关于 的作用及其底层实现原理的详细解析。 --- 一、 的作用 1. 允许在 Block 内部修改变量 默认情况下,Block 捕获外部局部变量是值拷贝(Capture by Value)。这意味着 Block 内部持有的是变量被捕获时的“快照”,是只读的。如果你尝试在 Block 内部修改一个没有 修饰的局部变量,编译器会报错。 加上 后,Block 捕获的是该变量的引用(地址),从而允许修改。 代码示例: 2. 延长变量的生命周期 当 Block 从栈(Stack)拷贝到堆(Heap)时(例如 Block 被赋值给属性或作为返回值),它捕获的 变量也会被移动到堆上。这样即使原来的作用域结束了(栈帧销毁),Block 依然可以安全地访问和修改这个变量。 --- 二、 底层实现原理:它是如何修改外部变量的? 的魔法在于:编译器会将 修饰的变量包装成一个对象(结构体)。 1. 结构体的转换 当编译器看到 时,它...