(1)在block内部可以访问block外部的变量
在block内 部可以使用外部变量
但是注意:这是新的内存空间变量
(2)局部变量在栈区
在 block中使用局部变量,会将局部变量拷贝一份在block中,block一般在堆区
例如:
int m=10;
void (^myBlock)()=^{
NSLog(@"m=%d",m);
};
myBlock();
当定义block的时候,block会把外部变量的值以const的方式(在block中m的值不能被修改)复制一份,存放到block所在的内存中
但是在代码块内部定义的变量会被保存到栈区。
注意:若定义const m=10,则不能再给m赋值
__block int m=10;//不再以const的方式拷贝
void (^myBlock)()=^{
m=100;
NSLog(@"m=%d",m);
};
myBlock();
打印出m=10因为0,
|
|