美文网首页iOS Developer
iOS 多线程等待

iOS 多线程等待

作者: IMKel | 来源:发表于2018-03-11 00:08 被阅读495次

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

    举个例子

        NSLog(@"..........start");
        
        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 addOperations:@[op1, op2] waitUntilFinished:YES];
        
        NSLog(@"..........end");
    

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

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

    [op2 addDependency:op1];
    

    相关文章

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

    相关文章

      网友评论

        本文标题:iOS 多线程等待

        本文链接:https://www.haomeiwen.com/subject/dlcifftx.html