浅谈ios block(1)

block,顾名思义,就是一个代码块,它封装了一段代码,且这段代码可以再任何时候执行。它的行为和形式都和C语言中的函数很像(block本身就是C语言中的语法)。但是它具有很多函数所没有的优异的特性,这也奠定了它在OC中的地位。Blocks可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值。它和传统的函数指针很类似,但是有区别:blocks是inline的,并且它对局部变量是只读的。

一:block基本的四种形式

block在形式上,有无参数无返回值类型、无参数有返回值类型、有参数无返回值类型和有参数有返回值类型这四种,是不是听起来很熟悉呢,没错,这一点它跟C语言的函数就是一样的。我们首先来看一下这四种类型的block是怎么定义的。

1)无参数无返回值类型

int (^myBlock2)() = ^(){

    //代码块语句
};
2)无参数有返回值类型
void (^myBlock1)() = ^{
       //代码块的语句
};
3)有参数无返回值类型

void (^myBlock3)(int ,int ) = ^(int a,int b){
         //代码块语句
};
4)有参数有返回值类型

int (^myBlock4) (int,int) = ^(int a,int b){
    //代码块语句
};

二.block的起别名(typedef)
跟使用结构体和枚举类型一样,我们习惯上会采用typedef定义block类型,以方便后续的使用和代码的阅读。
格式:typedef 返回值类型 (^新别名)(参数类型列表);
例如:typedef int (^newBlock)(int,float);
那么接下来我们就可以这样去定义block类型的变量了,newBlock block1;

三.block对外部变量的访问
1).对于外部传进来的一个普通变量,block内部会以const(意味着该值在block中不可修改)的形式copy一份存储到堆区,和之前传进来的变量已经不是同一个变量了。
2).对于外部传进来的以__block修饰的变量,block内部将不会以const形式copy了。





(未完待续 )


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值