第二章 2.2.5 截获的自动变量

2018-08-04  本文已影响8人  MrSYLong

上两节截获自动变量值与__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的操作会产生编译错误,但使用截获的值却不会有任何问题。

上一篇下一篇

猜你喜欢

热点阅读