苹果官方非常推荐使用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了