Block简单介绍

        Block代码块封装了一段代码,它可以在任意位置使用。Block既可以作为函数的参数也可以作为其返回值,也可以作为对象的属性使用。

        1、语法示例:

 int (^blockName)(int,int) = ^int(int a,int b){

               return a+b;
           };
语法格式:返回值数据类型 (^block代码块函数名)(参数类型,参数类型)。当参数为空时可直接用空的小括号(),如
 int (^blockName)() = ^int(){
           //业务逻辑
}
        2、Block的声明和定义

大致可分为以下几种(a:无返回值无参数  b:无返回值有参数 c:有返回值无参数d:有返回值有参数四种情况)

a 、无返回值,无参数

void(^myblok)(void)=^(void){

    NSLog(@"无返回值,无参数!");
};

b、无返回值,有参数

//声明
typedef void(^Method2)(int,int);
//定义
Method2 method2 = ^(int a,int b){
    
    NSLog(@"method2的执行加法,结果为:%d",(a+b));
};

c、有返回值,无参数

float (^Method1)() = ^float{
    
    return 2.1;
};

d、有返回值,有参数

//声明typedef int(^Method3)(float,float);//定义Method3 method3 = ^int(float a, float b){ return (int)(a+b);};


        3、__block关键字的使用

在block的使用中,在代码块中可以访问全局变量也可以修改全局变量的值,但是如果变量是局部变量,那么就只能对其进行访问但是不能进行修改。因为在执行到Block代码块时,已经对代码里的变量做了值拷贝。之后无论在 Block体内如何变化,值都保持之前拷贝的那一份。如果在变量前添加上__block关键字修饰,只该变量会变成可读写。例子如下:

3.1、block 内部可以对全局变量进行读写操作

在代码块内部可以访问全局变量a,同时也可以修改全局变量a得值。运行结果为:20,31

3.2、block内部对局部变量只能进行读操作,无法修改


3.3、对局部变量添加__block修饰即可在内部对该变量进行读写操作

运行结果为:20,41


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值