iOS block介绍
block因其古怪的语法结构所以看上去比较蛋疼,比较难记,还好工作中忘记怎么写了是有技巧的等下会说,block的所用就是帮你保存一份代码然后再恰当的时候调用,返回你所需要的“值”(没想到词,就用它吧,对block做了以下总结,做下笔记
如何声明及实现一个block 看图
定义无返回值 无参数的block
// 无返回值 无参数
void(^block01)() = ^(){
NSLog(@"01-无返回值 无参数的block");
};
block01();
定义无返回值 有参数的block
// 无返回值 有参数(int 类型)
void(^block02)(int) = ^(int age){
NSLog(@"%d",age);
};
// 传入一个参数
block02(20);
定义有返回值有参数的block
// 有返回值 有参数
int(^block03)(int) = ^(int num){
NSLog(@"03-有返回值 有参数的block num:%d",num);
return 100;
};
int temp = block03(200);
NSLog(@"03-有返回值 有参数的block temp:%d",temp);
打印结果都在这里了
好 开始介绍第一种block 把一段block代码当做**对象的属性值 以Person类为例
以operAtion(操作)为属性
定义属性
// 开发中第一种使用场景 将block保存到对象中
self.p.operAtion = ^(){
NSLog(@"02-将block当做属性值保存起来");
};
// 第二种写法
void(^block03)() =^(){
NSLog(@"03-将block当做属性值保存起来");
};
self.p.operAtion = block03;
在你认为合适的时刻调用这个属性 也就是封装的这段block代码
第二种block 把block当做方法的参数 也是最常用的写法
定义一个带有block的函数
实现这个函数
/**
* 实现方法
*
* @param block 在方法内部调用block
*/
-(void)eat:(void (^)(int))block{
NSLog(@"此处可封装N多代码 返回值可通过block的参数回调到外界 此处以 int 为例");
block(5);
}
外界调用这个方法
// 开发中第二种使用场景 将block作为方法的参数 在方法内部调用这个block
Person *p = [[Person alloc]init];
[p eat:^(int count){
NSLog(@"吃了%d个馒头",count);
}];