block小解

block是用来保存一段代码(程序运行时产生的代码)

跟函数的区别:函数是在程序运行之前就已经写好的,而block(代码块)是在程序运行中生成保存的代码块

Block:

1》block用来保存一段代码,我们可以称block为代码块

2》block的标记是一个上尖符号(^)

3》block跟函数也有类似之处:1⃣️可以保存代码

    2⃣️有返回值

  3⃣️有形参

《1》无形参无返回值block:

        void(^myBlock)() = ^{//【void】没有返回值 【(^myBlock)】block的名字 【()】没有形参 【^{}】block主体
            NSLog(@"我是被block(代码块)保存的代码!");
        };
        
        myBlock();//block的调用

输出:

2015-09-29 00:38:56.413 OCStudy[8835:7938557] 我是被block(代码块)保存的代码!

【void】没有返回值 【(^myBlock)】block的名字 【()】没有形参 【^{}】block主体          

《2》有形参有返回值block:

        int(^myBlockWitParam)(int,int) = ^(int a,int b){
            return a + b;
        };
        
        NSLog(@"myBlockWitParam(10,20):%d",myBlockWitParam(10,20));
输出:

2015-09-29 01:00:21.460 OCStudy[8859:8024734] myBlockWitParam(10,20):30
【int】返回值类型 【(^myBlockWitParam)】block的名字 【(int,int)】形参 【^(int a,int b){}】block主体


《3》指向函数的指针:

//函数
int sum(int a,int b) {
    return a + b;
}
//定义指向函数的指针p
int (*p)(int,int) = sum;
    
NSLog(@"p(10,40)=%d",p(10,40));

输出:

2015-09-29 01:17:46.904 OCStudy[8875:8112882] p(10,40)=50

《4》block内部可以访问外部的变量,想要在block内部改变外边的变量需要在变量前加上__block关键字修饰

       //block访问外部变量
       int a = 100;
        void(^blockValue)() = ^{
            NSLog(@"blockValue inside access a=%d",a);
        };
        blockValue();
输出:

2015-09-29 01:33:29.871 OCStudy[8912:8184727] blockValue inside access a=100


        //普通外部变量在block内部无法被修改,通过加上__block之后,我们可以在block内部对外部变量进行修改
        __block int a = 100;
        void(^blockValue)() = ^{
            a = 250;
        };
        blockValue();
        NSLog(@"blockValue reset a=%d",a);

输出:

2015-09-29 01:37:27.813 OCStudy[8920:8200029] blockValue reset a=250

《5》利用typedef来定义block

        typedef int (^Multi)(int,int);
        
        Multi multiAAndB = ^(int a,int b){
            return  a * b;
        };
        
        NSLog(@"multiAAndB(10,20)=%d", multiAAndB(10,20));
输出:

2015-09-29 01:44:49.439 OCStudy[8932:8233543] multiAAndB(10,20)=200

有了Multi,我们就可以利用Multi类型来定义变量



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值