前言
block作为OC中一种高级语法,其重要性不言而喻,对于程序员而言,从简单的控制器反向传值到令人眼花缭乱的RXCocoa响应式编程,block无处不在。故扎实掌握好block,熟记它的语法及底层实现和原理,才能应对自如。本系列文章将从四个方面,由浅入深描述block。
一 block语法之声明和实现
(一) block的声明细分为如下几种情况:
- block作为局部变量:
int (^block1) (int ,NSString *); 返回值 (^ blockName) (参数类型列表)
- block作为OC类的属性:1中的格式原封不动照着写就行,如
@property (nonatomic,copy) int (^block1) (int,NSString *);
- block作为函数参数:将1中的格式用()包起来,作为参数类型,并将blockname提出来放后面作为参数名,如
- (void)testBlockAsArgs: ( int (^)(int,NSString *) ) block1;
- block作为函数返回值:将1中的格式用()包起来,blockName置为空即可,如
- ( int (^)(int,NSString *) ) testBlockAsReturnValue;
(二) block的实现:
实现和声明略有不同,具体如下:
^ 返回值类型 (参数列表) {block代码块};
^ int (int a,NSString *name) {block代码块};
当返回值为void、参数列表为空时,可以省略之,如下:
返回值为void
^ (int a,NSString *name){
//block代码块
};
参数列表为空
^ int {
//block代码块
};
返回值为void,参数列表为空
^ {
//block代码块
}