ARC下Block的存储区域
ARC下block的存储区域
- 堆区
- 全局区
测试一下
-
不使用外部变量
void(^block)(void) = ^{ }; NSLog(@"block = %@",block);
打印结果
block = <__NSGlobalBlock__: 0x11ea480b0>
-
使用全局变量,静态变量,常量
static int a = 10; void(^block)(void) = ^{ NSLog(@"a = %i",a); }; NSLog(@"block = %@",block);
打印结果
block = <__NSGlobalBlock__: 0x11c6bc0b0>
-
使用了局部变量
int a = 10; void(^block)(void) = ^{ NSLog(@"a = %i",a); }; NSLog(@"block = %@",block);
打印结果
block = <__NSMallocBlock__: 0x604000644350>
结论
如果不引用局部变量,或者只引用全局变量,静态变量,常量等,Block存储在全局区。如果引用了局部变量,存储在堆区。