OC语言之学习篇——04——Block

来源:互联网 发布:沉浸式英语教学软件 编辑:程序博客网 时间:2024/05/16 09:17
---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------


Block,封装了一段代码,可以在任何时候执行。
和函数很类似,将一段代码封装在一个函数里面,在某一时刻调用函数,就调用了这段代码。
但是,函数需要在编译之前确定。而Block可以在运行的时候保存一段代码,也就是说在程序运行的过程中凭空产生一段代码,这是函数办不到的。
使用Block的标志是: ^。Block和函数很象:可以保存一段代码、有返回值、有形参、调用方式一样。
定义Block变量:

void (^myblock)() = ^{

        NSLog(@"----------------");

        NSLog(@"----------------");

    };


这是没有返回值,没有形参的block。而有形参的:

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

        return a + b;

    };

    int c = sumblock(10, 11);


如果想用block输n条横线:

void (^lineBlock)(int) =  ^(int n)

    {

        for (int i = 0; i<n; i++) {

            NSLog(@"----------------");

        }

    };

    lineBlock(5);


  block内部是可以直接访问外面的变量。但是,默认情况下,block内部是不能够直接修改外面的局部变量的。如果想在block内部修改局部变量,需要加上_block关键字。

__block int b = 20;

void (^block)();

block = ^{

    b = 25;

    };

block();

如何利用typedef来定义block类型呢?和函数一样。

typedef int (^MyBlock)(int, int);

这样,以后就可以利用MyBlock这种类型来定义block变量。

MyBlock block;

MyBlock b1, b2;

b1 = ^(int a, int b) {

    return a - b;

 }; 

 MyBlock b3 = ^(int a, int b) {

    return a - b;

 };




---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------
0 0
原创粉丝点击