OBJC的BLOCK简单理解

来源:互联网 发布:mysql修改数据库列名 编辑:程序博客网 时间:2024/05/29 18:36

block是什么?
顾名思义,它就是一个块,代码块。
但,我这里任性地把它当作是一个函数,它就是一个函数的声明和具体实现。

既然是函数,那么理解它的使用方式就比较简单了。
1)声明这个函数;
2)编写这个函数的具体实现。
3)在某个地方调用这个函数。

接下来看代码
1 声明这个函数

double (^blockExample)(int);

是不是很懊恼这个有点奇怪的写法?没关系,首先你只要明白这就是一个声明。跟声明变量类似,这个声明一个函数,你也可以把它看作一个变量。
下面具体看这行代码:
1)double : 这个是一个类型,写在最左边。它是返回值类型,也就是这个函数的执行完以后的返回值类型。你可以写int, float, void…都可以。
2)(int) : 这也是一个类型,写在最右边,它是这个函数的参数类型,注意:跟返回值不同,参数类型需要用()包起来。
3)(^blockExample):这个东西看起来很怪异,但其实只是语法上有点。其含义就是:我声明的这个是一个块,块的名字叫做blockExample。“^”表明这是一个块,后面跟着自定义的块的名字。注意:这个也需要用()包起来。

一句话总结:我声明了一个函数,叫做blockExample。参数是int类型,返回值是double类型。

2 编写具体实现
我们声明了一个函数,那这个函数总得做点什么。而所要做的具体内容是什么,那就需要我们来编写了。下面看代码:

^(int param){    NSLog(@"我在这个区块里做了一些事");}

看这个代码,“^”又出现了,说明这是一个块。再看()中除了类型,多了一个指代的名字,这是一个形式参数。接下来{}一个区块中,那么就是我们需要做的具体内容。

一句话总结:传入一个int型的参数,在{}中编写具体实现。

3 调用这个函数
前面两步,我们声明了函数,并编写了具体实现。
所以前两步的代码应该是:

double (^blockExample)(int) = ^(int param){    NSLog(@"我在这个区块里做了一些事");}

既然,我们有了这个函数。怎么调用它呢?很简单。
只需要

blockExample();

一句话
这样,BLOCK的三步就简单的完成了。总得看起来,其实也就两行代码。

0 0
原创粉丝点击