先上两段代码:
//1
int val = 0;
void (^blk)(void) = ^{val = 1};
//2
id array = [[NSMutableArray alloc] init];
void (^blk)(void) = ^{
id obj = [[NSObject alloc] init];
[array addobject:obj];
};
稍微用过block的同学都知道,第一个程序编译时会出错,因为该程序向截获的代码赋值了(如果要负值,就需要加上_block,变为_block变量),而第二段代码就不会报错,如果用C语言来描述的话,那就是截获NSMutableArray类对象用的结构体实例指针,虽然不能赋值,但是使用是没有问题的
原文地址:http://blog.csdn.net/lf644206005/article/details/45244349