Objective-C块是否与JavaScript中的匿名函数类似?

时间:2010-09-16 09:57:41

标签: objective-c objective-c-blocks

我试图理解块的概念。到目前为止我所读到的内容似乎在概念上类似于JavaScript中的匿名函数。这是对的吗?

2 个答案:

答案 0 :(得分:4)

,最大的部分。块是种类的 C函数处理类似对象,可以从周围范围捕获变量。匿名函数等同于块,但由于块的相当复杂的幕后机制,它们肯定不完全相同。

例如,如果您打算在函数/方法之外/之外使用一个块来定义块不再处于活动状态 - 如果您将块设置为某个属性或在GCD中使用(多个核心操作排队库),您需要使用Block_copy()(或[aBlock copy])进行复制。我不会详细介绍,但这肯定不是你用JS(匿名)函数做的事情。这与块文字分配在堆栈上(而不是代码中的某个地方)的事实有关,如果你希望它继续存在,你需要将它复制到堆中。

它可能变得非常复杂(但在设计上相当漂亮),但对于大多数用例而言,它非常简单,您可以像匿名JS函数一样对待它。 ; - )

答案 1 :(得分:3)

是。 Objective-C中的块是闭包。