blcok 变量的声明。
@property(nonatomic,strong)void(^myBlock)();//无参无返回值
@property(nonatomic,strong)void(^myBlock1)(NSString*);//带参数无返回值
@property(nonatomic,strong)NSString*(^myBlock2)(NSString*);//带参数与返回值
//定义变量
void(^myBlock)() =nil;//无参无返回值
void(^myBlock1)(NSString*) =nil;//带参数无返回值
NSString*(^myBlock2)(NSString*) =nil;//带参数与返回值
在Block中只读。Block定义时copy变量的值,在Block中作为常量使用,所以即使变量的值在Block外改变,也不影响他在Block中的值。
int base = 100;
BlkSum sum = ^ long (int a, int b) {
// base++; 编译错误,只读
return base + a + b;
};
base = 0;
printf("%ld\n",sum(1,2)); // 这里输出是103,而不是3
static变量、全局变量。如果把上个例子的base改成全局的、或static。Block就可以对他进行读写了。因为全局变量或静态变量在内存中的地址是固定的,Block在读取该变量值的时候是直接从其所在内存读出,获取到的是最新值,而不是在定义时copy的常量。
static修饰变量,效果与_ _block一样
static int base = 100;
BlkSum sum = ^ long (int a, int b) {
base++;
return base + a + b;
};
base = 0;
printf("%d\n", base);
printf("%ld\n",sum(1,2)); // 这里输出是3,而不是103
printf("%d\n", base);
表明Block外部对base的更新会影响Block中的base的取值,同样Block对base的更新也会影响Block外部的base值。
https://blog.csdn.net/LVXIANGAN/article/details/43228845
网友评论