1. 程式人生 > >對於兩個非同步任務結束後回撥的解決方案

對於兩個非同步任務結束後回撥的解決方案

引入ReactiveCocoa,cocoaPods上有ReactiveCocoa這個類。這裡pod的安裝和install就不多說了。注意的是,如果install一直在等待,那就是被牆了,使用pod install --verbose --no-repo-update這條命令。

    RACSignal *signal1 = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
            [NSThread sleepForTimeInterval:2];
            NSLog(@"1");
            [subscriber sendNext:@"1"];
            [subscriber sendCompleted];
        });
        return nil;
    }];
    
    RACSignal *signal2 = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
            [NSThread sleepForTimeInterval:3];
            NSLog(@"2");
            [subscriber sendNext:@"2"];
            [subscriber sendCompleted];
        });
        return nil;
    }];
    
    [[signal1 zipWith:signal2] subscribeNext:^(id x) {
        NSLog(@"3");
    }];

首先建立兩個訊號。這裡推薦在非同步任務方法中新增一個block,在block回撥中作
            [subscriber sendNext:@"1"];
            [subscriber sendCompleted];
傳送next訊息,這裡可以為nil;注意這兩條必須寫,不寫的話下面的繫結就沒有意義。

ZipWith繫結兩個任務。回撥中執行兩個非同步任務完成後的動作。對於多個任務的繫結樓主還是研究。。。