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