在ARC中,没有捕获外部变量的block是_NSGlobalBlock_
捕获了外部变量的block类会是_NSMallocBlock_或者_NSStackBlock
如果,block被赋值给某个变量,在这个过程中会执行_block_copy将原来_NSStackBlock_变成
NSMallocBlock,但是如果block没有赋值给某个变量,那他的类型是_NSStackBlock
1 全局block
定义在函数外部的block是global类型的
定义在函数内部的block,但是没有捕获任何自动变量的,也是全局的
全局静态block,不会访问任何外部变量,执行完就销毁
typedef int(^MHFBlock)(int);
-(void)printMhfBlock {
MHFBlock mb = ^(int count) { return count};
}
2 栈上的block
保存在栈中的block,当函数返回时会被销毁,与第一种的区别是调用了外部变量
typedef void(^MHFBlock)();
-(MHFBlock)returnBlock {
__block int add = 10;
return ^{print("add=%d\n",++add);
};
}