天天看點

關于iOS OC部分block的一點初級理論和應用

   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);

繼續閱讀