您的位置:首页 > 其它

Block的定义,以及使用

2014-11-13 08:44 204 查看
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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: