gpt4 book ai didi

objective-c - "__block"关键字是什么意思?

转载 作者:IT老高 更新时间:2023-10-28 12:12:28 26 4
gpt4 key购买 nike

Objective-C 中的 __block 关键字究竟是什么意思?我知道它允许您修改 block 内的变量,但我想知道...

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

最佳答案

它告诉编译器任何被它标记的变量在 block 内使用时都必须以特殊方式处理。通常, block 中也使用的变量及其内容会被复制,因此对这些变量所做的任何修改都不会显示在 block 之外。当它们被标记为 __block 时,在 block 内所做的修改在 block 外也可见。

有关示例和更多信息,请参阅 The __block Storage Type在 Apple 的 Blocks Programming Topics 中。

重要的例子是这个:

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 在调用 block 之前都已修改。然而,在 block 内部,只有对 localCharacter 的修改是可见的,这要归功于 __block 关键字。反之, block 可以修改localCharacter,而且这个修改在 block 外是可见的。

关于objective-c - "__block"关键字是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7080927/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com