iOS Developer

iOS 多线程等待

2018-03-11  本文已影响495人  IMKel

在实际项目开发中,你可能会遇到这样一个需求——举报功能,要求可上传多张图片到阿里云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 多线程信号量的用法(解决异步线程中的线程等待问题)

上一篇下一篇

猜你喜欢

热点阅读