的目标c:如何在低级别创建块并以什么成本创建块?

时间:2019-04-22 12:01:53

标签: objective-c objective-c-blocks

找不到详细的说明。

是对象还是函数?

是在运行时按需创建还是在编译时或加载阶段创建的?

创建它们的位置:是在堆上还是在堆栈上?

调用程序和顺序是什么?

1 个答案:

答案 0 :(得分:2)

  

是对象还是函数?

两者;块实际上是捕获的状态位,也可以像函数一样调用。编译器会合在一起使它的 object 部分大部分透明(尤其是使用ARC)。

  

是在运行时按需创建还是在编译时或加载阶段创建的?

运行时或编译时,取决于块。

一个不能捕获任何状态的块可以在编译时完全创建。会在运行时创建一个捕获只能在运行时知道的状态的块。

  

创建它们的位置:是在堆上还是在堆栈上?

两者;确实是堆栈,堆或静态RO映射的内存(即编译时间块)。

通常在堆栈上创建块(捕获状态),然后在第一个Block_copy()操作上将其提升到堆上。

  

调用程序和顺序是什么?

不清楚您在这里问什么。就像C函数一样调用块,在C函数中,第一个参数始终是对块对象的引用,从而提供了一个钩子来捕获捕获的状态。