__block
Objective-C中的关键字到底是什么意思?我知道它允许您修改块内的变量,但我想知道...
它告诉编译器,在块内使用它时,必须以特殊方式处理由它标记的任何变量。通常,会复制也在块中使用的变量及其内容,因此对这些变量所做的任何修改都不会在块外显示。当用标记时__block
,在块外部也可以看到所做的修改。
有关示例和更多信息,请参见Apple的Blocks编程主题中的__block存储类型。
一个重要的例子是:
extern NSInteger CounterGlobal;
static NSInteger CounterStatic;
{
NSInteger localCounter = 42;
__block char localCharacter;
void (^aBlock)(void) = ^(void) {
++CounterGlobal;
++CounterStatic;
CounterGlobal = localCounter; // localCounter fixed at block creation
localCharacter = 'a'; // sets localCharacter in enclosing scope
};
++localCounter; // unseen by the block
localCharacter = 'b';
aBlock(); // execute the block
// localCharacter now 'a'
}
在此示例中,在调用该块之前修改了localCounter
和localCharacter
。但是,localCharacter
由于__block
关键字的原因,在块内部,仅对的修改是可见的。相反,该块可以修改,localCharacter
并且该修改在块外部可见。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句