block小解

来源:互联网 发布:it桔子网 编辑:程序博客网 时间:2024/05/20 00:37

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;}
//定义指向函数的指针pint (*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 0