一 Block
block是一种数据类型,用来存储(封装)代码块,跟函数很相似,官方非常推荐使用Block,效率高,性能高。。。
Block跟函数的区别:
1.函数在编译的时候就要先确定;
2.Block可以在运行过程中产生一些代码块,而且这些代码块可以作为参数被传 来传去;
3.Block可以作为方法的参数,方法的返回值,还可以作为对象的属性;
4.函数和Block都可以封装一段代码,都可以带参数,都有返回值,调用方式一 样;
【Block主要使用在多线程,异步任务下载,集合排序,动画转场,Block传值】;
【Demo1】-【1-Block的基本语法】
//带参数的,有返回值的Block代码块;
int(^sumBlock)(int,int)=
^(int a,int b){
return a+b;
};
int sum = sumBlock(4,6);
NSLog(@"%d",sum);
【Demo2】-【2-使用typedef定义Block类型】
【Demo3】-【3-Block作为方法的参数,返回值,属性】
typedef void (^MyBlock1)(NSString *);
typedef void (^MyBlock2)(int a,int b);
typedef void (^MyBlock3)(NSString *);
-(void)method1:(MyBlock2)block2{
block2(10,20);
NSLog(@"method1这个方法被调用了");
}
-(MyBlock3)method2{
return ^(NSString *str){
NSLog(@"str = %@",str);
NSLog(@"method2被调用了!");
};
}
-(void)method3{
//调用属性这个代码块;
//回调
self.block1(@"杨迪被 method3 调用了");
}
在主函数中
Person *per = [[Person alloc] init];
//1.block作为对象的属性,如何赋值
per.block1 = ^(NSString *str){
// NSLog(@"杨迪十个大傻逼,,代码块!");
NSLog(@"str = %@",str);
};
[per method3];
//2.block作为方法的参数
[per method1:^(int a,int b) {
int sum = a+b;
NSLog(@"sum = %d",sum);
}];
//3.block作为返回值
MyBlock3 block3 = [per method2];
block3(@"杨第是个但傻叉 block3");