一、BLOCK
BLOCK:封装代码,可以在任何时候执行
block的标志:^
二、BLOCK与函数
block与函数很像:
*可以保存代码
*有返回值
*有形参
*调用方式一样
三、block的定义和使用:
//没有参数 void (^myBolck1)() = ^(){ NSLog(@"aaa"); }; myblock1(); void (^myBolck2)() = ^{ //省去形参括号 NSLog(@"aaa"); }; myblock2(); //有参数,没有返回值 void (^myBlock3)(NSString *) = ^(NSString *name){ NSLog(@"%@", name); }; myBlock3(@"zsling"); //有参数,有返回值 int (^myBlock4)(int, int) = ^(int a, intb){ return a + b; }; int sum = myBlock4(1, 2); /*作用等同于上 int (^myBlock4)(int, int); myBlock = ^(int a, int b){ return a + b; }; int sum = myBlock4(1, 2); */
四、block访问外部变量
void main() { int a = 10; __block int b = 20; void (^myBlock5) = ^{ //a = 13; //默认情况下,block内部不能修改外部的局部变量 b = 30; //外部局部变量加上__block关键字,在block内部可修改此局部变量 NSLog(@"%d", a); //block内部可以访问外部变量 } }
五、利用typedef定义block类型
typedef int(^MyBlock)(int, int); //方法与指向函数的指针类似 typedef int(*Point)(int, int); MyBlock block; block = ^{ NSLog(@"aaa"); } MyBlock sumBlock = ^(int a, int b){ return a + b; }