Block的定义,以及使用
2014-11-13 08:44
204 查看
Block的演变过程
1.定义一个函数,无参数,无返回类型
2.定义一个无参数,无返回类型的Block时使用 用尖号"^"表示它是一个Block,
如void (^myBlock)(),myBlock是Block的名字,后面()代表它没有参数,不可省略.
将上面test函数的函数体前加一个^号就是一个完整的代码块,不要忘记函数体后要加";"号
^{NSLog(@"这是一个普通C函数");};
定义一个有参数,有返回值的Block
1.还是按照一个有参数有返回类型的函数推理,即:
2.定义:
1>确定Block的返回值类型
2>定义一个有意义的名字
3>有几个参数,参数的类型是什么
4>在代码块中编写要执行怎样的操作,
5>调用这个Block
Block在某个类中作为参数传递
1.Block既然是一种数据类型,不可以直接传递.首先使用typedef定义,它的block名calculateBlock,并将它作为参数
2.在.m文件中实现
3.如何使用
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);
相关文章推荐
- block的定义和使用,以及block与数组排序
- 单链表的定义以及使用
- 单链表的定义以及使用
- 全局变量的定义以及函数内怎么使用局部变量和全局变量?
- SQL Server知识点:数据库之局部变量的定义、赋值、以及使用
- block(代码块)的介绍以及使用方法和变量之间的关系
- javascript入门系列演示·函数的定义以及简单参数使用,调用函数
- paip.c++ static 变量的定义以及使用...
- Spring学习笔记 关于Bean定义的重用-使用abstract以及parent标签属性
- 三种定义JavaScript函数方法以及使用匿名函数打造自己的类库
- JavaBean定义、JSP中使用以及内省操作
- 单链表的定义以及使用
- 还原Wss3.0内容数据库时遇到:"ComputerName\Microsoft##SSEE 上的 WSS_Content 包含用户定义的架构。数据库在能够使用之前必须为空。请删除所有表、存储过程以及其他对象,或使用其他数据库。 " 的提示,无法加载内容数据库
- Ruby之旅(二) Ruby的基本语法以及对象的使用,方法的定义及调用,属性的定义及使用
- 24中设计模式+1的定义以及使用场合
- [导入]单链表的定义以及使用
- javascript入门系列演示·函数的定义以及简单参数使用,调用函数
- 内联(Inline)的定义以及什么情况下使用内联(转)
- 为什么使用拦截器以及定义
- ARC下Block何时会从栈自动被复制到推, 以及__block和__weak的使用问题