为什么我无法使用它?
__block NSString *tableStrings[4][2];
[userValues enumerateObjectsUsingBlock:^(NSNumber *userScore, NSUInteger idx, BOOL *stop) {
tableStrings[idx][0] = @"< 5";
tableStrings[idx][1] = @"> 95";
}];
编译器对我"Cannot refer to declaration with an array type inside block"
大喊大叫。我的印象是在变量允许完成之前表示__block
。我可以使用NSString[x][x]
使其工作,但我很好奇为什么不允许这样做。
答案 0 :(得分:0)
Blocks无法从封闭范围访问自动或__block
存储的数组变量。这只是块的限制。这是因为这两件事都需要能够复制变量。并且数组类型不可分配。
他们可以为数组创建一个特殊情况,即逐个元素地复制数组。 C ++ 11 lambdas就是这种特殊情况,因此即使数组不可赋值,它们也可以按值捕获数组。然而,这些街区人们并没有费心去做这个特例。