“ __block”关键字是什么意思?

姆斯拉维

__blockObjective-C中的关键字到底是什么意思?我知道它允许您修改块内的变量,但我想知道...

  1. 它到底告诉编译器什么?
  2. 它还有其他作用吗?
  3. 如果仅此而已,那么为什么首先需要它?
  4. 它在文档中的任何地方吗?(我找不到)。
暗尘

它告诉编译器,在块内使用它时,必须以特殊方式处理由它标记的任何变量。通常,会复制也在块中使用的变量及其内容,因此对这些变量所做的任何修改都不会在块外显示。当用标记时__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'
}

在此示例中,在调用该块之前修改localCounterlocalCharacter但是,localCharacter由于__block关键字的原因,在块内部,仅对的修改是可见的相反,该块可以修改,localCharacter并且该修改在块外部可见。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

关键字对象在Kotlin中是什么意思?

关键字strictfp是什么意思?

new 关键字在界面中是什么意思

'fileprivate'关键字在Swift中是什么意思?

关键字“ transient”在Java中是什么意思?

显式关键字是什么意思?

jsr关键字是什么意思?

Swift中的“ required”关键字是什么意思?

ALSO关键字在MLISP中是什么意思?

Laravel路由中的“ as”关键字是什么意思?

“ self”关键字在WebWorkers中是什么意思

“和”关键字在OCaml中是什么意思?

界面中的关键字“ new”是什么意思?

“ Base”关键字在Julia中是什么意思?

Future,async,await 关键字是什么意思?

在关键字“ forEach”中,“ return”关键字是什么意思?

这是什么新的关键字“产量”在Java中13是什么意思?

在Raku类定义中,“具有”关键字在“方法”之前是什么意思?

点(在两个关键字之间)在 ARM 汇编中是什么意思?

类标题中的关键字“ constructor”是什么意思?

D中的“ in”和“ out”关键字是什么意思?

header / impl关键字在kotlin中是什么意思?

芹菜中bind = True关键字是什么意思?

“ this”关键字在初始化程序块中是什么意思?

关键字“ const”不会使值不变。这是什么意思?

在交换机中使用时,关键字类型是什么意思?

LLVM tablegen中的field关键字是什么意思?

Ruby的AST中的'send'关键字是什么意思?

VB6关键字Set是什么意思?