iOS 如何合并网络请求/多线程等待

在实际项目开发中,你可能会遇到这样一个需求——举报功能,要求可上传多张图片到阿里云OSS,图片上传完毕之后再调用自己服务器接口。那么如何做到等待多张图片上传完毕再调用后台接口?下面列举一种做法(当然还有其他做法),使用NSBlockOperation类。

举个例子


    NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
        NSLog(@"开始上传第1张图片......%@", [NSThread currentThread]);
        [NSThread sleepForTimeInterval:10];
        NSLog(@"第1张图片上传完毕......%@", [NSThread currentThread]);
    }];
    
    NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
        NSLog(@"开始上传第2张图片......%@", [NSThread currentThread]);
        [NSThread sleepForTimeInterval:7];
        NSLog(@"第2张图片上传完毕......%@", [NSThread currentThread]);
    }];
    
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    queue.maxConcurrentOperationCount = NSOperationQueueDefaultMaxConcurrentOperationCount;
    [queue addOperation:op1];
    [queue addOperation:op2];
    //[op2 addDependency:op1];//可以添加依赖关系,即op2需要等待op1请求完才发送请求
    [queue addOperationWithBlock:^{
        dispatch_async(dispatch_get_main_queue(), ^{
            //回主线程提示上传成功
            };
    }];

注意:
NSOperationQueue类的maxConcurrentOperationCount属性。该属性用于设置开启线程的个数;
1>当值为NSOperationQueueDefaultMaxConcurrentOperationCount或大于1时(默认值),是并行队列,意味着图片1和图片2能够同时上传,谁都不用等谁上传完再上传。
2>当值为1时,是串行队列,图片则是一张张的上传,图1没上传完,图2就只能等着。

提示
线程之间也是可以添加依赖的,例如你要求图片2要等待图片1 上传完毕之后才能上传,代码如下:

[op2 addDependency:op1];

相关文章

iOS开发多线程篇—NSOperation基本操作
iOS多线程:『GCD』详尽总结
IOS 多线程信号量的用法(解决异步线程中的线程等待问题)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 欢迎大家指出文章中需要改正或者需要补充的地方,我会及时更新,非常感谢。 一. 多线程基础 1. 进程 进程是指在系...
    xx_cc阅读 7,271评论 11 70
  • 首先明确线程和进程的关系和区别: 一个程序至少有一个进程,一个进程至少有一个线程. 线程的划分尺度小于进程,使得多...
    kkj1996阅读 227评论 0 0
  • 在这篇文章中,我将为你整理一下 iOS 开发中几种多线程方案,以及其使用方法和注意事项。当然也会给出几种多线程的案...
    伯恩的遗产阅读 275,062评论 251 2,330
  • 概览 大家都知道,在开发过程中应该尽可能减少用户等待时间,让程序尽可能快的完成运算。可是无论是哪种语言开发的程序最...
    周末年安阅读 1,914评论 1 50
  • 多线程 在iOS开发中为提高程序的运行效率会将比较耗时的操作放在子线程中执行,iOS系统进程默认启动一个主线程,用...
    郭豪豪阅读 2,637评论 0 4