1、代码块
1.1代码块的定义
返回值类型 (^代码块名字)(参数类型)=^(参数列表){( 代码块内容)
};
1.2代码块调用
代码块名字(实参);
例如:
void (run)(int)=(int b){
NSLog("%i",b*10);
};//代码块的定义
run(a);//代码块调用
2、代码块的注意事项:
2.1 代码块给同时定义的本地变量在代码块内部做了一个只读的备份
例如:
int a=10;//本地变量
void (^run)(int)=^(int b){ //代码块给同时定义的本地变量在代码块内部做了一个只读的备份
NSLog(
"%i",a*10); //使用了本地变量
};
run(a);
a=5;
run(a); 此例子输出结果均为100
2.2在代码块内部修改本地变量的值需要在变量前面加static 、 _block
区别: static 型的变量在出了函数还能用, 但_block不能用
2.3 typedef声明了一个类型 需要注意的是在代码块前面加这个关键字,并且不能给代码块初始化
typedef int (Sum)(int,int);
Sum sum=(int c,int b){
return c+b;
};
NSLog("%i",sum(2,3));
2.4代码块的递归
注意:需要将代码块声明为全局变量或者是静态变量
例如:
static void (^output)(int i) = ^(int i){
if (i>0) {
NSLog(
"递归:%i",i);
output(i-1);
}
};
output(5);
2.5数组排序
NSArray *array=@[@10,@12,@25,@43,@55,@3,@41,@22,@2,@18];
NSArray *arry=[array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
return [obj1 compare:obj2];//从小到大
return [obj2 compare:obj1];//从大到小
}];
转载于:https://my.oschina.net/u/2555806/blog/595397