一:Block简介
Block的实际行为和Function很像,最大的差别是在可以存取同一个Scope的变量值。Block实体形式如下:
^(传入参数列){行为主体};
Block实体开头是“^”,接着是由小括号所包起来的参数列(比如 int a, int b, int c),行为主体由大括号包起来,专有名字叫做block literal。行为主体可以用return回传值,类型会被compiler自动辨别。如果没有参数列要写成: ^(void){ //逻辑处理代码 }; 可以写成:^(){ //逻辑处理代码 }; 还可以写成(推荐):^{ //逻辑处理代码 };
有参数列就必须写成:
^(int a,NSString* name){ //逻辑处理代码 };
二,Block Pointer
Block Pointer是这样定义的:
回传值(^名字)(参数列);
//声明一个blockD的Block Pointer,其所指向的Block有一个int输入和int输出
int (^blockD)(int);
//将Block实体指定给blockD 变量
blockD = ^(int a){
return a*a ;
};
//调用方法,很像function的用法
int result = blockD(5);
NSLog(@"%d", result);
三,block在开发中的推荐的写法,逻辑清晰
typedef void(^BackToReloadTableViewBlock)(void);//定义一个block类型别名BackToReloadTableViewBlock,代表改block类型
@property(copy,nonatomic)BackToReloadTableViewBlock backBlock;//声明一个backBlock变量,属于BackToReloadTableViewBlock类型
2,简单写法
@property(copy,nonatomic) void(^BackToReloadTableViewBlock)(void);//直接定义一个BackToReloadTableViewBlock变量 (Block类型的变量)
两种写法的理解:
1,typedef void(^BackToReloadTableViewBlock)(void); 扩展理解为:typedef void(^)(void) BackToReloadTableViewBlock; 表示定义一个别名BackToReloadTableViewBlock 来代表该Block
2,void(^BackToReloadTableViewBlock)(void); 扩展理解为:void(^)(void) BackToReloadTableViewBlock;定义了一个BackToReloadTableViewBlock的变量;