在Objective-C中,使用块(Blocks)相比普通方法和函数有什么优势?我已经阅读了文档,但没有找到关于使用块而不是其他语言特性的具体用例。
我确定我错过了一些东西,所以能否有人以比现有文档更简单的方式解释块的优点?
在Objective-C中,使用块(Blocks)相比普通方法和函数有什么优势?我已经阅读了文档,但没有找到关于使用块而不是其他语言特性的具体用例。
我确定我错过了一些东西,所以能否有人以比现有文档更简单的方式解释块的优点?
块(Block)是一种将一段代码封装并有效地存储以备后用的方法。块通常用于代替回调函数,在iPhone SDK中的新API中经常使用块这种方式。API会接受一段“块”(block)代码,并在完成后运行它。
使用块可以避免创建自己的线程,维护每个线程的状态,管理锁、设置自动释放池等繁琐的工作。
当与Grand Central Dispatch (GCD) API一起使用时,块可以在队列上运行,整个代码段可以非常轻松地异步运行,但仍保持了多线程编程所需的健壮性。
我喜欢苹果的"一个简短实用的块指南"作为介绍概念的资料。
此外,几乎所有在回答"建议学习Snow Leopard中块的资源"时提到的资源都适用于这里。
除了那些资源,我还推荐Drew McCormack的文章"Cocoa for Scientists(第XXVII部分):使用Objective-C闭包"和"Cocoa for Scientists(XXXIII):C/Objective-C中10个块的用途", 以及Joachim Bengtsson的"使用C块编程"。
WWDC 2010视频第206和211会话的内容"介绍iPhone上的块和Grand Central Dispatch"以及"通过Grand Central Dispatch简化iPhone应用程序开发"也值得观看。