__block 和 __weak 的区别
Blocks可以访问局部变量,但是不能修改,如果需要修改局部变量,需要加上__block
__block int multiplier = 7;
int (^myBlock)(int) = ^(int num){
multiplier ++;
return num*multiplier;
};
上例中若未加__block,则会报错:Variable is not assignable(missing __block type specifier)
1.__block不管是ARC还是MRC模式下都可以使用,可以修饰对象,还可以修饰基本数据类型。
2.__weak只能在ARC模式下使用,也只能修饰对象(NSString),不能修饰基本数据类型(int)。
3.__block对象可以在block中被重新赋值,__weak不可以。
网友评论