块代码编程---声明和创建块代码

声明一个块代码的引用

块代码变量用来保存到块代码的引用。使用和声明函数指针相识的语法声明块代码变量,只是把其中的*换成占位符^。块代码类型基本上都是C语言的格式。下面就是一些有效的块代码变量声明:

void (^blockReturningVoidWithVoidArgument)(void);
int (^blockReturningIntWithIntAndCharArguments)(int, char);
void (^arrayOfTenBlocksReturningVoidWithIntArgument[10])(int);

块代码同样支持可变参数列表。没有参数的块代码必须在参数列表中使用void。

块代码在传入参数,返回值等方面使用元数据验证,在设计上达到数据安全的目的。你可以把一个块代码的引用转换成一个任何类型的指针,反之亦然。但是你不能通过一个指针引用来对一个块代码引用进行解引用--因为在编译时期不能计算块代码所占大小。

你可以创建块代码的类型--只是你在多个地方创建同一种类型的块代码的最好的方式:

typedef float (^MyBlockType)(float, float);
 
MyBlockType myFirstBlock = // ... ;
MyBlockType mySecondBlock = // ... ;

创建块代码

使用^标示一个块代码的开始。可能后面跟着使用一对小括号括起来的参数列表。块代码的代码部分是在一对大括号里面。下面是一个块代码定义的示例,并把这个块代码赋值给一个前面声明的块代码变量--和C语言一样,块代码使用一个分号;作为定义的结束:

int (^oneFrom)(int);
 
oneFrom = ^(int anInt) {
    return anInt - 1;
};

如果你在块代码定义中没有标示返回值类型,返回值类型会被通过块代码的内容推断出来,如果这个返回值是推断出来的,并且参数列表是void,你可以省略这个void。如果多个return语句出现,他们必须返回完全相同类型的值(合适的时候必须使用转换)。

全局块代码

在文件作用域内,你可以定义一个块代码具有全局可用的:

#import <stdio.h>
 
int GlobalInt = 0;
int (^getGlobalInt)(void) = ^{ return GlobalInt; };

你可能感兴趣的:(块代码编程---声明和创建块代码)