OC---block使用

/* 总结:   block是一种数据类型:

 block用来保存一段代码

 block标志  ^

 block和函数很像:

  1> 可以保存一段代码

  2> 有返回值

  3> 有形参

  4> 调用方式和函数一样

 

 掌握:

 1.定义block变量

  void (^myBlock2)();

  int (^sumBlock)(int, int);

 

 2.利用block封装代码

 ^() {

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

 };

 ^ {

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

 };

 ^(int a,int b) {

    return a + b;

 };

 

 3.block访问外面变量

  * block内部可以访问外面的变量

  * 默认情况下,block内部不能修改外面的局部变量

  * 给局部变量加上__block关键字,这个局部变量就可以在block内部修改、访问

 

 4.利用typedef定义block类型,类型名大写开头

  typedef int(^MyBlock)(int, int);   // 以后就可以用MyBlock这种类型定义block变量

  MyBlock b;

  MyBlock b1, b2;

  b = ^(int a,int b) {

    return a + b;

  };

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

     return a + b;

  };

 

 */

// block基本使用

void baseUseBlock()

{

    

    // 定义block变量myBlock;此时并不执行block里面的代码

    // 无返回值,无形参

    void (^myBlock)() = ^(){

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

    };

    

    void (^myBlock2)();

    myBlock2 = ^(){

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

    };

    

    // 如果block没有形参,可以省略后面的()

    void (^myBlock3)() = ^{

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

    };

    // 利用block变量myblock调用block内部的代码;执行

    myBlock();

    myBlock2();

    myBlock3();

}

 

// block基本使用2

void baseUseBlock2()

{// 定义一个block类型的变量sumBlock;此时并不执行block里面的代码

    // 返回int,接收2int类型的形参

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

        return a + b;

    };

    

    /*   等价于

     int (^sumBlock)(int, int);

     sumBlock= ^(int a, int b){

     return a + b;

     };

     // 指向函数的指针  int (*p)(int, int) = sum;

     */

    NSLog(@"he is %d", sumBlock(233,23));  // 利用block变量sumBlock调用block内部的代码;执行

    

    

    // 利用block输出n条横线

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

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

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

        }

    };

    lineBlock(3);

}

 

// block基本使用3---typedef

void baseUseBlock3()

{

    typedef int(^MyBlock)(int, int);   // typedef自定义新的数据类型MyBlock  类型名 大写开头

    

    MyBlock sumBlock;

    sumBlock = ^(int a,int b){

        return a + b;

    };

    

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

        return a - b;

    };

    NSLog(@"%d,%d", sumBlock(1,5), minusBlock(3,6));

}

 

// block基本使用4---访问外面的局部变量

void baseUseBlock4()

{

    int a = 10;

    __block int b = 100;

    void (^myBlock)() = ^ {

//        a = 1000;   // 错误写法  默认情况下,block内部不能修改外面的局部变量

        b = 111;    // 给局部变量b加上__block关键字,这个局部变量就可以在block内部修改、访问

        NSLog(@"a is %d, b is %d", a, b);  //  block内部可以访问外面的变量

    };

    myBlock();

}

posted on 2015-04-08 09:55  我是一匹小黑马  阅读(140)  评论(0编辑  收藏  举报