6

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

4

2 回答 2

4

的,在很大程度上。块是一种C 函数,被处理类似对象,可以从周围范围捕获变量。匿名函数等价于块,但由于块的幕后机制相当复杂,因此肯定不相同。

例如,如果您计划在定义块不再活动的函数/方法之后/之外使用块 - 如果您将块设置为某处的属性或在 GCD 中使用(多核操作队列库),您需要使用Block_copy()(或[aBlock copy])复制它。我不会详细介绍,但这肯定不是您使用 JS(匿名)函数所做的事情。这与块文字分配在堆栈上(而不是代码中的某处)这一事实有关,如果您希望它持久存在,则需要将其复制到堆中。

它可能会变得相当复杂(但它的设计相当漂亮),但对于大多数用例来说,它相当简单,您可以将其视为匿名 JS 函数。;-)

于 2013-01-03T18:36:47.780 回答
3

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

于 2010-09-16T10:08:46.527 回答