我试图理解块的概念。到目前为止我所读到的内容似乎在概念上类似于JavaScript中的匿名函数。这是对的吗?
答案 0 :(得分:4)
是,最大的部分。块是种类的 C函数处理种类似对象,可以从周围范围捕获变量。匿名函数等同于块,但由于块的相当复杂的幕后机制,它们肯定不完全相同。
例如,如果您打算在函数/方法之外/之外使用一个块来定义块不再处于活动状态 - 如果您将块设置为某个属性或在GCD中使用(多个核心操作排队库),您需要使用Block_copy()
(或[aBlock copy]
)进行复制。我不会详细介绍,但这肯定不是你用JS(匿名)函数做的事情。这与块文字分配在堆栈上(而不是代码中的某个地方)的事实有关,如果你希望它继续存在,你需要将它复制到堆中。
它可能变得非常复杂(但在设计上相当漂亮),但对于大多数用例而言,它非常简单,您可以像匿名JS函数一样对待它。 ; - )
答案 1 :(得分:3)
是。 Objective-C中的块是闭包。