iOS_Blocks

来源:互联网 发布:房价会如何变化 知乎 编辑:程序博客网 时间:2024/06/06 18:47

iOS_Blocks

用一句话来表示Block:带有自动变量(局部变量)的匿名函数

语法

返回值类型 (^block名称) (参数列表) 表达式>

(1)没有函数名
(2)带有”^”
(3)返回值类型可省略:如果表达之中含有return语句,使用返回值类型,如果没有,使用void类型.例:

    int (^count){return count + 1}; //返回值为int类型    void (^void){printf("blocks\n")};//可省略为如下    ^ {printf("blocks\n")};//参数列表(为空时)也可省略

Block类型变量

(1)block类型变量和一般的C语言变量完全不同,可作为局部变量,函数参数,静态变量和全局变量来使用.

(2)typedef声明block变量

typedef int (^blcok_t)(int); //typedef 返回值 (^block名)(参数)

(3)Block截获自动变量值

int day = 256;int val = 10;const char *fmt = "val = %d\n";void (^blk)(void) = ^{printf(fat,val);}val = 2;fat = "these values were changed.val = %d\n";blk();//该段代码的执行结果为 val = 10//block 可以截获自动变量的值并保存,在block代码块中使用.

__block说明符

block截获并保存自动变量的值,但是保存之后无法修改,如果需要在block表达式中修改自动变量的值,需要给自动变量附加__block说明符.例:

__block int val = 0;void (^blk)(void) = ^{    val = 1;//修改变量值(不加__block会发生编译错误)}blk();print("val = %d\n",val);//结果为 val = 1;
0 0
原创粉丝点击