Block使用

 

#import <Foundation/Foundation.h>

/*

 block要掌握的东西

 1> 如何定义block变量

    1)无参数,无返回值

    void (^myBlock)();

    2)有参数,有返回值

    int (^sumBlock)(int,int);

 2> 如何利用block封装代码

    1)有参数,有返回值

    ^(int a,int b){

        return a + b;

    };

    2)没有参数可以省略()

    ^(){

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

    };

    ^{

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

    };

 3> block访问外面的变量

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

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

    3)给局部变量加上__block关键字,这个局部变量就可以在block内部修改

 4> 利用typedef定义block类型

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

    MyBlock block;

    MyBlock b1,b2;

    b1 = ^(int a,int b){

        return a - b;

    };

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

        return a + b;

    };

*/

typedef int (*SumP)(int,int);

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

int sum(int a,int b){

    return a + b;

}

int main(int argc, const char * argv[])

{

    return 0;

}

#pragma mark - 没有返回值、没有形参的block

void test() {

    //定义block变量

    void (^myBlock)() = ^{ //没有形参,^后面的(可以省略)

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

    };

    //使用block变量

    myBlock();

}

 

#pragma mark - 有返回值、有形参的block

void test2(){

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

        return a + b;

    };

    int c = sumblock(10,11);

    NSLog(@"%d",c);

}

#pragma mark - 数据N条横线

void test3(){

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

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

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

        }

    };

    lineBlock(5);

}

#pragma mark - 定义和复制分开

/*

    1.定义和复制分开

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

    3.给局部变量加上__block关键字,这个局部变量就可以在blo

 */

void test4(){

    int a = 30;

    __block int b = 50;

    void (^block)();

    block = ^{

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

        NSLog(@" a = %d ",a);

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

        //a = 20; //编译器报错

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

        b = 55;

    };

    block();

}

#pragma mark - 使用typedef定义block类型

void test5(){

    //int (*p)(int,int) = sum;

    //int (*p2)(int,int) = sum;

    SumP p = sum;

    SumP p2 = sum;

    NSLog(@"%d - %d",p(1,2),p2(4,5));

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

        return a + b ;

    };

    NSLog(@"%d",sumBlock(10,20));

}

 

posted on 2015-02-14 11:38  雾里寻梦  阅读(160)  评论(0)    收藏  举报

导航