一、关于block
1、block的作用:保存一段代码。
2、苹果官方推荐的一种语法,类似于C语言的函数,但是比函数更加灵活。
3、^是block语法的标识。
二、block的用法
1)无返回值无参数
1 - (void)myFirstBlock 2 { 3 //1.定义block 4 void (^myblock)() = ^{ 5 NSLog(@"无参数无返回值"); 6 }; 7 //2.调用block 8 myblock(); 9 10 }
输出结果:
2016-02-18 09:56:50.124 01-block[750:25107] 无参数无返回值
2)有参数没有返回值
- (void)mySecondBlock { //1.定义block void (^mySecondBlock)(int,int) = ^ (int num1,int num2){ NSLog(@"有参数无返回值:%d",num1 + num2); }; //2.调用block mySecondBlock(2,3); }
输出结果:
2016-02-18 10:03:22.221 01-block[811:30160] 有参数无返回值:5
3)有参数有返回值
1 - (void)myThirdBlock 2 { 3 //1.定义block 4 double (^myThirdBlock)(double,double) = ^ (double r1,double r2){ 5 return r1 + r2; 6 }; 7 //2.调用block 8 double r3 = myThirdBlock(1.1,2.2); 9 NSLog(@"有参数有返回值:%f",r3); 10 }
输出结果:
2016-02-18 10:06:42.615 01-block[861:32505] 有参数有返回值:3.300000
三、block语法的格式
四、block的注意点
1)Block内部可以访问外部变量;
2)默认情况下,Block内部不能修改外部的局部变量
3)给局部变量加上__block关键字,则这个局部变量可以在block内部进行修改
示例代码如下:
1 - (void)myFourBlock 2 { 3 int num = 5; 4 void (^myFourBlock)() = ^{ 5 6 num = 6; 7 NSLog(@"%d",num); 8 }; 9 }
如果写成上面的代码,Xcode会在第六行“num = 6;”报错:missing __block type specifier;
修改代码如下:
- (void)myFourBlock { __block int num = 5; void (^myFourBlock)() = ^{ num = 6; NSLog(@"%d",num); }; myFourBlock(); }
输出结果:
2016-02-18 10:25:02.195 01-block[1016:45943] 6
代码虐我千百遍,我待代码如初恋!