Blocks编程

Blocks通常代表一个很小、自包的代码片段。因此它们作为封装的工作单元在并

发执行,或在一个集合项上,或当其他操作完成时的回调的时候非常实用。

Blocks作为传统回调函数的一个实用的替代办法,有以下两个原因:

1 ,它们可以让你在调用的地方编写代码实现后面将要执行的操作。

因此Blocks通常作为框架方法的参数。

2.     它们允许你访问局部变量。

而不是需要使用一个你想要执行操作时集成所有上下文的信息的数据结构来

进行回调,你可以直接简单的访问局部变量。


声明和使用一个Block

使用^操作符来来声明一个block变量和指示block文本的开始。Block本身的主

体被{}包含着,如下面的例子那样(通常使用 C 的;符合指示block的结束):

int multiplier = 7;

int (^myBlock)(int) = ^(int num) {

return num * multiplier;

};

Blocks的最大一个特色就是可以修改相同作用域的变量。你可以使用__block存

储类型修饰符来给出信号要修改一个变量。


你同样可以创建blocks的类型。当你在多个地方使用同一个给定的签名的block时,这通常被认为是最佳的办法。

你可以使用^修饰符来标识一个block表达式的开始。它通常后面跟着一个被()包含起来的参数列表。Block的主体一般被包含在 {} 里面。下面的示例定义了一个

简单的block,并把它赋值给前面声明的变量(oneFrom)。这里block使用一个标准 C

的结束符;来结束。

void (^blockReturningVoidWithVoidArgument)(void);

int (^blockReturningIntWithIntAndCharArguments)(int, char);

void (^arrayOfTenBlocksReturningVoidWithIntArgument[10])(int);

typedef float (^MyBlockType)(float, float);

MyBlockType myFirstBlock = // ... ;

MyBlockType mySecondBlock = // ... ;


防止循环引用  用 __weak 获取将要被retain的对象。

其实 Block 和 swift 的闭包差不多。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Blocks编程要点 目录 简介............................................
    xuejunjun阅读 1,291评论 0 5
  • 2.1 Blcoks概要 2.1.1 什么是Blocks Blocks是C语言的扩充功能——“带有自动变量(即局部...
    SkyMing一C阅读 2,374评论 6 18
  • Blocks Blocks Blocks 是带有局部变量的匿名函数 截取自动变量值 int main(){ ...
    南京小伙阅读 958评论 1 3
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,860评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,742评论 18 399