Block的定义,以及使用

Block的演变过程

1.定义一个函数,无参数,无返回类型

void test(){
    NSLog(@"这是一个普通C函数");
}

2.定义一个无参数,无返回类型的Block时使用 用尖号"^"表示它是一个Block,

如void (^myBlock)(),myBlock是Block的名字,后面()代表它没有参数,不可省略.

将上面test函数的函数体前加一个^号就是一个完整的代码块,不要忘记函数体后要加";"号

^{NSLog(@"这是一个普通C函数");};

 

        //函数调用
         test();
        //定义一个Block
        void (^myBlock)() = ^{
            NSLog(@"这是一个无参,无返回类型的Block");
        };
        //调用Block
        myBlock();                

 

定义一个有参数,有返回值的Block

1.还是按照一个有参数有返回类型的函数推理,即:

int sum(int a ,int b){
    return a + b;
}

2.定义:

1>确定Block的返回值类型

2>定义一个有意义的名字

3>有几个参数,参数的类型是什么

4>在代码块中编写要执行怎样的操作,

5>调用这个Block

//有参有反的Block
 int (^sumBlock1)(int a ,int b) = ^(int a ,int b){
            return a + b;
        };
//传递参数,并定义变量接收结果
int sum = sumBlock1(1,2);
NSLog(@"sum = %i",sum);

 

Block在某个类中作为参数传递

1.Block既然是一种数据类型,不可以直接传递.首先使用typedef定义,它的block名calculateBlock,并将它作为参数

#import <Foundation/Foundation.h>
typedef int (^calculateBlock)(int a,int b);

@interface UseBlock : NSObject
-(int)calculateNumber1:(int)num1 andNum2:(int)num2 andCalculate:(calculateBlock)calculate;
@end

2.在.m文件中实现

@implementation UseBlock
- (int)calculateNumber1:(int)num1 andNum2:(int)num2 andCalculate:(calculateBlock)calculate{
    //这里自己理解为嵌套传递
    return calculate(num1 , num2);
}
@end

3.如何使用

//定义两数之和的block
int (^sumBlock)(int a ,int b) = ^(int a ,int b){
            return a + b;
        };

UseBlock *u = [[UseBlock alloc]init];
//将定义好的block作为参数传递
int result = [u calculateNumber1:10 andNum2:20 andCalculate:sumBlock];
NSLog(@"%i",result);

 

posted @ 2014-11-13 08:44  高了个辉  阅读(547)  评论(0编辑  收藏  举报