截获类型
1.局部变量 (基本数据类型/对象类型)
2.静态局部变量
3.全局变量
4.静态全局变量
对于基本数据类型的局部变量截获其值。
对于对象类型的局部变量连同所有权修饰符一起截获。
以指针形式截获局部静态变量。
不截获全局变量、全局静态变量。
***********************************华丽丽的分割线***********************************
__block 修饰符
对局部变量(基本数据类型/对象类型)进行赋值时,需要添加__block。
赋值 ≠ 使用
__blockNSMutableArray*dataArray =nil;
void(^Block) (void) = ^
{
dataArray = [NSMutableArrayarray];
};
Block();
需要__block修饰,block 内部对局部变量的对象赋值
NSMutableArray *dataArray = [NSMutableArray array];
void(^Block) (void) = ^
{
[dataArrayaddObject:@"不需要__block"];
};
Block();
这只是使用操作,不需要__block。
对静态局部变量/全局变量/静态全局变量进行赋值的时,不需要__block。
静态局部变量是通过指针形式操作使用对象的,相当于操作的是 block 外部的变量,所以不需要__block。
因为<全局变量/静态全局变量>不涉及截获操作是直接使用的。所以不需要__block。
网友评论