标签:
代码块
除了函数中的代码,代码块还包括变量绑定。代码块还有另一个名称:闭包(closure)。
代码块保护两种类型的绑定:自动型与托管型。自动绑定使用栈中的内存,托管绑定使用堆中的内存。
代码块的格式与函数指针的有点像。函数指针:void (*f)(void);代码块:void (^f)(void);只需把“*”换成“^”。
然后我们来写一个代码块:
int (^f)(int a,int b) = ^(int a,int b){return (a+b);};
int res = f(1,2);
printf("res is %d\n",res);
这里通过代码块实现了计算两个数相加。语法概括如下:
<returnType> (^blockName)(list of arguments) = ^(arguments){body;};
//<返回类型>(^代码块名)(参数列表) = ^(参数){代码体;};
注:编译器可以推断代码块的返回类型,所以可以省略它,当代码块没有参数时,参数也可以省略。如下(打印“Hello iOS”):
void (^hello)() = ^{printf("Hello iOS\n");};
使用代码块不用写“^”,定义时需要添加,如:int res = f(1,2);跟函数一样。如果直接使用代码块,不需要创建一个代码块变量,直接关联内容即可,下面是一个对数组排序的功能:
NSArray *array = [NSArray arraywithObjects:@"A",@"C",@"E",@"D",@"B",nil];
NSArray *res = [array sortedArrayUsingComparator:^(NSString *obj1,NSString *obj2)]{
return [obj1 compare:obj2];}];
看起来好像JavaScript里的函数定义:)
标签:
原文地址:http://www.cnblogs.com/shvier/p/5031283.html