objective-c: 区块是如何在底层创建的,成本是多少?

objective-c: How blocks are created on low-level and at what cost?

找不到详细说明。

它是对象还是函数?

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

在哪里创建:在堆上还是在堆栈上?

调用过程和调用顺序是什么?

Is it an object or function?

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

Is it created in runtime on demand or at compile-time or at loading stage?

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

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

Where they are created: On heap or on stack?

两者都有;实际上,堆栈、堆或静态 RO 映射内存(即编译时块)。

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

What is the invocation procedure and order?

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