现在的位置: 首页 > 综合 > 正文

Blocks 概念预览

2019年10月01日 ⁄ 综合 ⁄ 共 916字 ⁄ 字号 评论关闭

Blocks概念预览:Conceptual Overview

Block对象提供了写ad hoc function body的方法,正如C 及 C的派生语言C++和Objective-c等一样。在其他的语言及环境中,块对象有时也称作 闭包。这里它通常俗称为 "blocks", 否则很容易同标准 C 语言中的代码块相混淆。

1. Block的功能

block是内联的代码集合:

。同函数一样有定义类型的参数列表

。有可推测的或者已定义的返回类型

。能够从定义block的词法作用域类获取状态

。能够选择性的编辑词法作用域的状态

。Can share the potential for modification with other blocks defined within the same lexical scope

。Can continue to share and modify state defined within the lexical scope (the stack frame) after the lexical scope (the stack frame) has been destroyed

你可以复制块,甚至将它传递到其他线程延迟执行(或者当前线程的runloop),编译和运行时会在block的所有副本的生命周期中把从block引用的变量保留(The compiler and runtime arrange that all variables referenced from the block are preserved for the life of all copies of
the block)。尽管在纯C和C++中也有block,block也总是一个Objective-C对象。

2. Block的使用

block通常是自包含的小的代码片段,这样,在下列情况它们非常有用:作为并发执行的小的工作单元;遍历集合中的对象;作为另外一个操作完成时的回调。

Blocks作为传统回调函数的替代品有两个原因:

。它允许在方法调用处编写在方法实现的上下文中稍后执行的代码,于是,block会是framework methods的参数。

。它能够访问本地的变量。你不用使用回调去请求某一数据结构,该数据结构包含了在某一操作中需要的上下文信息,你只需要直接访问本地变量。

抱歉!评论已关闭.