1.Block文法,使用 (1)//無參數無傳回值 void (^block)(); (2)//無參數但是有傳回值的 int (^block1)(); (3)//有參數無傳回值 void (^block2)(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;
}; 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"]; 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; };
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];
}]; NSLog(@"%@",resultArr);