objective-c – __block的替代语法?

我有关于__block变量的语法的问题。我知道你可以使用__block在一个变量的范围,所以它不是只读的块内。然而在apple docs的一个地方,我看到一个替代:

“Variables in the defining scope are read-only by default when used in a block. If you need to change the value of such a variable, you can use a special syntax:

int count = 0;
float cumulativeValue = 0.0;
UpdateElements( a, N, ^(float element){
    |count, cumulativeValue|
    float value = factor * element;
    ++count;
    cumulativeValue += value;
    return value;
} );

In this example, count and cumulativeValue are modified inside the block, so they are included in comma-separated list of shared variables at the beginning of the block scope.

这种语法看起来更干净,我假设你可以修改你没有声明,但仍在范围内的变量。但是,我没有看到这个其他地方,xCode编译器不喜欢我的基本块。这是合法的语法吗?

哇。没有看到这种语法在很长时间。

这是在块的开发过程中探索的各种句法结构之一。它最终被拒绝,因为它在声明意图时太不精确,导致的行为会混淆。

考虑一个有三个块的范围,其中两个块通过| a |声明一个变量为readwrite。没有办法知道从int a = 5;在范围的顶部声明变量的值在某些块的范围内是readwrite。

同样,这将使编译器实现显着更加困难。 C中的传统是变量存储类型在声明时是固定的。支持这种语法会破坏期望。

因此,决定使用类似于挥发性或静态的储存型改性剂。使用__block主要是因为__前缀大大减少了通过添加裸关键字将破坏的代码量。

感谢您的问。错误提交和文档将被固定和/或最终删除。

http://stackoverflow.com/questions/16988818/alternative-syntax-to-block

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:objective-c – __block的替代语法?