iOS开发备忘录

iOS 多个网络请求结束监听

2017-08-13  本文已影响195人  CoderHG

每当在同一时间网络请求的时候, 务必要监听到所有的网络请求结束的时间.

请看如下例子:


// 模拟同时请求多个网络请求, 并监听所有网络请求都结束.
- (void)dispatch_group_Test {
    // 创建一个组
    dispatch_group_t group = dispatch_group_create();
    
    // 网络请求 1
    {
        // 进入组
        dispatch_group_enter(group);
        
        // 假装这里有一个网络请求
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
            // TODO : 假装这里有一个不定时的网络请求
            [NSThread sleepForTimeInterval:2];
            
            NSLog(@"网络请求 1 结束 %@", [NSThread currentThread]);
            // 任务结束, 退出组
            dispatch_group_leave(group);
        });
    }
    
    // 网络请求 2
    {
        // 进入组
        dispatch_group_enter(group);
        
        // 假装这里有一个网络请求
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
            // TODO : 假装这里有一个不定时的网络请求
            [NSThread sleepForTimeInterval:3];
            NSLog(@"网络请求 2 结束 %@", [NSThread currentThread]);
            // 任务结束, 退出组
            dispatch_group_leave(group);
        });
    }
    
    // 网络请求 3
    {
        // 进入组
        dispatch_group_enter(group);
        
        // 假装这里有一个网络请求
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
            // TODO : 假装这里有一个不定时的网络请求
            [NSThread sleepForTimeInterval:1];
            NSLog(@"网络请求 3 结束 %@", [NSThread currentThread]);
            // 任务结束, 退出组
            dispatch_group_leave(group);
        });
    }
    
    
    // 所有子线程任务全部完成, 并回到主线程
    dispatch_group_notify(group, dispatch_get_main_queue(), ^{
        NSLog(@"所有请求结束 %@", [NSThread currentThread]);
    });
}

还有另一种方式:

let globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
let group = dispatch_group_create()

dispatch_group_async(group, globalQueue) { () -> Void in
    println("1")
}
dispatch_group_async(group, globalQueue) { () -> Void in
    println("2")
}
dispatch_group_async(group, globalQueue) { () -> Void in
    println("3")
}
dispatch_group_notify(group, globalQueue) { () -> Void in
    println("completed")
}

来自于 : iOS GCD使用指南

上一篇 下一篇

猜你喜欢

热点阅读