0

为什么我不能使用这个?

__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在变量之前表示将允许这样做。我可以使用 usingNSString[x][x]但我很好奇为什么不允许这样做。

4

1 回答 1

0

块不能__block从封闭范围访问自动或存储的数组变量。这只是块的限制。这是因为这两件事都需要能够复制变量。并且数组类型不可分配。

他们可能会为数组创建一个特殊情况,即数组是逐个元素复制的。C++11 lambdas 做了这种特殊情况,因此它们可以按值捕获数组,即使数组不可赋值。然而,积木们并没有费心制造这种特殊情况。

于 2013-04-16T21:21:40.293 回答