代码之家  ›  专栏  ›  技术社区  ›  Gukki5

通过块与非块捕获块中外部变量的性能差异

  •  2
  • Gukki5  · 技术社区  · 7 年前

    将外部声明的变量引入块时。。。

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

    用块存储修饰符声明的封闭词法范围的局部变量是通过引用提供的,因此是可变的。 任何更改都反映在封闭词法范围中,包括在同一封闭词法范围内定义的任何其他块。

    在块的词法范围内声明的局部变量,其行为与函数中的局部变量完全相同。 块的每次调用都会提供该变量的新副本。这些变量反过来可以用作常量,也可以通过块中包含的块中的引用变量来使用。

    我听说使用_u块效率较低,但这怎么可能呢?难道你不总是避免昂贵的拷贝吗?

    2 回复  |  直到 7 年前
        1
  •  3
  •   newacct    7 年前

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

    即使你宣布它为 __block ,它最初存储在堆栈上(类似于局部变量),但如果复制了使用它的任何块,它将被移动到堆中,并且此移动将涉及变量的副本。

        2
  •  2
  •   Amin Negm-Awad    7 年前

    不,这并不昂贵,因为只有 变量

    引用的对象本身不会被复制。