上两节截获自动变量值与__block说明符,在Block中将值赋值给截获的外部基础类型的自动变量,就会产生编译错误。
那么截获OC对象,调用变更该对象的方法那?
// 示例
id array = [[NSMutableArray alloc] init];
void (^blk) (void) = ^{
id obj = [[NSMutableArray alloc] init];
[array addObject:obj];
};
blk();
说明:
经测试,上面代码是没有问题的。
那么截获OC对象,给截获的对象直接赋值那?
// 示例
id array = [[NSMutableArray alloc] init];
void (^blk) (void) = ^{
array = [[NSMutableArray alloc] init];
};
blk();
说明:
经测试,会出现编译错误。
这是为什么?
上面示例代码中,截获的变量值为NSMutableArray类的对象。如果用C语言描述,就是截获NSMutableArray类对象用的结构体实例指针。虽然赋值给截获的自动变量array的操作会产生编译错误,但使用截获的值却不会有任何问题。