Block:
1.//代码块的声明
void (^aBlock) (NSString *str);
// 代码块变量的赋值
aBlock = ^(NSString *str){
NSLog(@"%@", str);
};
// 提示:在声明代码块的时候,是可以传递多个参数的,中间使用‘,’分隔开就醒了,也可以不写出参数的名称,只写类型就可以,但是不建议这么做,因为别人看你的代码的时候可能会不理解,建议写全。要记住,最后面也是以分号结尾的。
// 代码块声明的时候返回值不可以省略,但是参数名可以省略
// 代码块变量赋值的时候返回值可以省略,但是参数吗不可以省略
2.代码块的声明比普通变量的声明复杂,普通变量不需要传入参数,并且没有返回值。因为代码块存储的数据是一个函数体,所以声明代码块变量时需要声明参数和返回类型。
3.‘^’叫做脱字符
4.// 调用代码块,直接使用名称调用即可,然后传递需要的参数,有返回值的接受下,反之不需要接收
void (^MyBlock) (NSString *str) = ^(NSString *str) {
5.把代码块像对象一样传递
// 定义一个参数是代码块的方法
void useCodeBlock(int (^mmyBlock) (int x, int y)) {
}
// 以代码块作为函数参数
// 通常来说,block都是一些简短代码片段的封装,适合做工作单元,通常用来坐并发任务、遍历、以及回调。用block作为回调函数,可以使得程序员写代码更顺畅,不用中途跑到另一个地方写一个回调函数。采用block,可以在调用函数时直接写后续代码处理,将其作为参数传递过去,供其任务执行结束时回调。
6.在代码块中使用全局变量和局部变量
7.使用代码块进行NSArray和NSMutableArray的排序
#if NS_BLOCK_AVAILABLE
typedef NSComparisonResult (^NSComparator) (id obj1, id obj2);
#endid