gpt4 book ai didi

objective-c - 通过 __block 与不通过 __block 捕获 block 中的外部变量的性能差异

转载 作者:行者123 更新时间:2023-12-01 12:36:28 24 4
gpt4 key购买 nike

将外部声明的变量引入 block 时...

使用__block指令通过引用捕获变量...

Variables local to the enclosing lexical scope declared with the __block storage modifier are provided by reference and so are mutable. Any changes are reflected in the enclosing lexical scope, including any other blocks defined within the same enclosing lexical scope.

没有通过值捕获变量...

Local variables declared within the lexical scope of the block, which behave exactly like local variables in a function. Each invocation of the block provides a new copy of that variable. These variables can in turn be used as const or by-reference variables in blocks enclosed within the block.

我听说使用 __block 效率较低,但这怎么可能呢?您不会总是避免昂贵的副本吗?

最佳答案

除非变量类型是一个巨大的结构体或巨大的 C++ 类,否则复制的成本不会很高。

即使您将其声明为 __block,它最初也存储在堆栈中(就像局部变量一样),但如果复制任何使用它的 block ,它将被移动到堆中,并且这无论如何,移动都会涉及变量的副本。

关于objective-c - 通过 __block 与不通过 __block 捕获 block 中的外部变量的性能差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45706384/

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