1.Block语法,使用
(1)//无参数无返回值
void
(^block)();
(2)//无参数但是有返回值的
int
(^block1)();
(3)//有参数无返回值
void (^block2)(int a,int b);
(4)//有参数有返回值
int (^block3)(int a,int b);
(4)//有参数有返回值
int (^block3)(int a,int b);
***********
(5)//无参数无返回值
//实现
block = ^(){printf("wucanwufanhuizhi\n");};
//调用
block();
//无参数但是有返回值的
block1 =^(){return 0;};
printf("%d\n",block1());
//有参数无返回值
block2 =^(int a ,int b){
NSLog(@"%d=====%d",a, b);
};
block2(2,3);
//有参数有返回值
block3 = ^(int a,int b){
return a + b;
};
block = ^(){printf("wucanwufanhuizhi\n");};
//调用
block();
//无参数但是有返回值的
block1 =^(){return 0;};
printf("%d\n",block1());
//有参数无返回值
block2 =^(int a ,int b){
NSLog(@"%d=====%d",a, b);
};
block2(2,3);
//有参数有返回值
block3 = ^(int a,int b){
return a + b;
};
printf("%d\n",block3(4,5));
//无参数无返回值
void (^block5)() = ^(){
printf("hdsggfhg");
};
block5();
//无参数有返回值
int (^block6)() =^(){
return 2;
};
block6();
//有参数无返回值
void(^block7)(NSString *) =^(NSString *array){
NSLog(@"%@",array);
};
block7(@"hfduhg");
//有参数有返回值
NSMutableDictionary *(^block8)(NSDictionary *) =^(NSDictionary *dic){
return [dic mutableCopy];
};
NSDictionary *dic = @{@"key1":@"obj1",@"key2":@"obj1"};
NSMutableDictionary *dict =block8(dic);
[dict setObject:@"obj3" forKey:@"key3"];
void (^block5)() = ^(){
printf("hdsggfhg");
};
block5();
//无参数有返回值
int (^block6)() =^(){
return 2;
};
block6();
//有参数无返回值
void(^block7)(NSString *) =^(NSString *array){
NSLog(@"%@",array);
};
block7(@"hfduhg");
//有参数有返回值
NSMutableDictionary *(^block8)(NSDictionary *) =^(NSDictionary *dic){
return [dic mutableCopy];
};
NSDictionary *dic = @{@"key1":@"obj1",@"key2":@"obj1"};
NSMutableDictionary *dict =block8(dic);
[dict setObject:@"obj3" forKey:@"key3"];
NSLog(@"%@",[dict class]);
2.为block类型重命名,将NSInteger(^)(NSInteger,NSInteger)类型重命名为Block。在Block块语法内部可以使用全局变量,直接修改。在block块语法内部可以读取局部变量,不支持修改。若要修改,必须使用__block修饰。
typedef NSInteger(^Block)(NSInteger,NSInteger);
Block block =^(NSInteger a,NSInteger b)
{
return a > b ? a : b ;
};
__block NSInteger x = 32;
Block block1 =^(NSInteger a,NSInteger b){
x ++;
return x;
Block block =^(NSInteger a,NSInteger b)
{
return a > b ? a : b ;
};
__block NSInteger x = 32;
Block block1 =^(NSInteger a,NSInteger b){
x ++;
return x;
};
3.排序
第一步定义一个数组
NSArray *arr = @[@9,@3,@8,@5];
第二步 我们实现block
NSComparator sortblock = ^(id obj1,id obj2){
return [obj1 compare:obj2];
};
然后调用需要block的排序方式
NSArray
*resultarr = [arr sortedArrayUsingComparator:sortblock];
//第二种方法
NSArray
*arr1 =[arr
copy
];
NSArray
*resultArr = [arr1
sortedArrayUsingComparator
:^
NSComparisonResult
(
id
obj1,
id
obj2) {
return [obj1 compare :obj2];
}];
return [obj1 compare :obj2];
}];
NSLog(@"%@",resultArr);