我试图理解块的概念。到目前为止,我所读到的似乎在概念上类似于 JavaScript 中的匿名函数。这个对吗?
问问题
1007 次
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 回答