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 =[arrcopy];
NSArray
*resultArr = [arr1 sortedArrayUsingComparator:^NSComparisonResult(id
obj1,
id obj2) {
return [obj1 compare:obj2];
}];
return [obj1 compare:obj2];
}];
NSLog(@"%@",resultArr);
本文深入探讨了Objective-C中的Block语法,包括不同参数情况下的定义与使用方法,并展示了如何通过Block进行数据排序与操作。同时,阐述了如何为Block类型重命名并讨论其在内部对全局变量的操作限制。

338

被折叠的 条评论
为什么被折叠?



