iOS Block截获变量
2018-11-01 本文已影响7人
没八阿哥的程序
什么是Block
block是将函数
及其执行上下文
封装起来的对象
关于Block截获变量
int multiplier = 6;
int(^Block)(int) = ^int(int num ){
return num * multiplier ;
};
multiplier = 4;
NSLog("result is%d" ,Block(2) ) ;
来看这道经典的block面试题,它的结果是12还是8?(答案为12)
static int multiplier = 6;
int(^Block)(int) = ^int(int num ){
return num * multiplier ;
};
multiplier = 4;
NSLog("result is%d" ,Block(2) ) ;
而这个答案为8。这是因为:
- 对于
基本数据
类型的局部变量
截获其值 - 对于
对象
类型的局部变量连同所有权修饰符
一起截获 - 以
指针形式
截获静态变量
-
不截获
全局变量和静态全局变量