苹果官方非常推荐使用block,具体体层没研究过,只知道block封装了一段代码,可以在任意你需要的地方调用,用法如下
返回值类型(^block名)(形参列表)这就定义了一个block
比如定义一个返回两个数相加的block
int main(int argc, const char * argv[])
{
@autoreleasepool {
int (^Sum)(int,int)=^(int a,int b){
return a+b;
};
int a=Sum(2,4);
NSLog(@"%d",a);
}
return 0;
}
block还有一种特性,就是可以访问外部的变量,但是默认情况下不能修改外部的变量,如果要在block内部修改外部的变量,该变量需要被__block关键字修
__block int temp=6;
void(^AccessTemp)()=^(){
NSLog(@"temp=%d",temp);
temp=8;
NSLog(@"temp=%d",temp);
};
AccessTemp();
打印结果:
2014-06-21 19:13:47.243 block测试[63536:303] temp=6
2014-06-21 19:13:47.244 block测试[63536:303] temp=8
顺利访问并修改了……
可以把block用typedef定义成一种类型,像使用普通类型一样使用block
typedef int(^Jisuan)(int,int);
int main(int argc, const char * argv[])
{
@autoreleasepool {
Jisuan mul=^(int a,int b){
return a*b;
};
NSLog(@"%d",mul(2,4));
}
return 0;
}
定义了一个接收两个int参数,返回int结果的block,将该block typedef为Jisuan类型,就可以像声明普通类型一样声明并使用Jisuan了