iOS_Blocks

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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值