版权说明:本文为原创文章,未经允许,不得转载。
代码块(Block)
1.代码块是对C语言中函数的扩展,除了函数中的代码,代码块还包含变量绑定。代码块有时候也被称之为闭包。
由于函数调用是异步执行的,如果想让一个操作执行完之后,执行另一个函数,则无法按照正常代码书写顺序进行编程,这时就需要代码块。
代码块是一个函数体(匿名函数),它是 Objective-C 对于闭包的实现,在代码块中,可以持有或引用局部变量,同时利用 Block 可以将一个操作作为一个参数进行传递。
代码块本质上和其他变量类似,不同的是,代码块存储的数据是一个函数体,可以像调用其他标准函数一样,传入参数值,并得到返回值。
2.Block 的定义
脱字符 (^) 是代码块的语法标记。
Block 定义:返回值类型(^ 变量名)(参数列表)
int (^myBlock)(int)
typedef定义:返回值类型(^类型名称)(参数列表);
typedef int(^myBlock)(int,int);
Block的实现:^(参数列表){操作主体};
^(NSString * str1){ NSLog(@"%@",str1); };
借用一张图来表示:
3.代码块的使用
3.1 参数是 NSString * 的代码块
void (^printBlock)(NSString *) = ^(NSString * str1){
NSLog(@"%@",str1);
};
printBlock(@"Hello World!");
以上代码输出结果为 Hello World!
3.2 利用代码块进行数组排序
NSArray *strArray = [NSArray arrayWithObjects:@"s1", @"s6", @"s3", @"s10", @"s22", @"s17", @"s31", nil];
NSArray *sortArray = [strArray sortedArrayUsingComparator:^NSComparisonResult(id string1, id string2){
return [string1 compare:string2 options:NSNumericSearch];
}];
NSLog(@"sortArray:%@",sortArray);
以上代码输出结果为:
sortArray:(s1, s3, s6, s10, s17, s22, s31)
3.3 代码块可以使用和修改全局变量,而局部变量可以使用却无法修改,如需修改,需要在局部变量前加上 _block 关键字进行修饰。