main.m
#import <Foundation/Foundation.h> void test4(); int main(int argc, const char * argv[]) { @autoreleasepool { test4(); } return 0; } // 普通的局部变量,block只会引用它初始的值(block定义那一刻),不能跟踪变量的改变 void test1() { int i = 10; void (^next)() = ^{ printf("当前i的值是:%d ",i); // 输出为10 }; i = 20; next(); } // 被static修饰的局部变量,block内部会一直引用 void test2() { static int i = 10; /** * block 的定义语法 * void 是返回值 * (^next) 定义一个block,block的名字是next * (int) 代表该block可以接收一个参数 */ void (^next)(int) = ^(int i){ printf("当前i的值是:%d ",i); // 输出为20 }; i = 20; next(5); } // 被__block修饰的局部变量,block内部会一直引用 void test3() { __block int i = 10; void (^next)() = ^{ printf("当前i的值是:%d ",i); // 输出为20 }; i = 20; next(); } int j = 10; // 全局变量,block会一直引用 void test4() { void (^next)() = ^{ printf("当前i的值是:%d ",j); // 输出为20 }; j = 20; next(); }