block类型

block是一种数据类型,在iOS开发中广泛使用且被苹果公司极力推荐使用,其功能很像C语言中的函数指针。

^ 是block的特有标志。

block的实现代码包含在{ }中。

大多数情况下,以内联的形式被定义及使用。


void(^demoBlock)()=^{NSLog(@"demoBlock");}int(^sumBlock)(int,int)=^(intx,inty){returnx+y;}

block的使用和函数指针的使用类似

int(^sumblock)(int,int)=^(inta,intb){returna>b?a:b;}intc=sumblock(10,20);NSLog(@"c=%d",c);


block内部可以访问外部的变量

外部的局部变量,block内部不能修改,全局变量可以。

如果局部变量使用__block声明,则可以在内部修改。

inta=10;__blockintb=20;void(^myblock)();myblock=^{NSLog(@"a=%d",a);b=20;}myblock();

实际上,定义block时会对局部变量进行拷贝(副本)


block的重要意义:在处理异步任务时非常方便,这也是block应用的难点