AFNetworking PHAsset  获取多个视频上传

2017-05-29  本文已影响167人  ping_oO

使用Dispatch Semaphore
dispatch_semaphore_t 类似信号量,可以用来控制访问某一资源访问数量。
使用过程:

1 先创建一个Dispatch Semaphore对象,用整数值表示资源的可用数量
2 在每个任务中,调用dispatch_semaphore_wait来等待
3 获得资源就可以进行操作
4 操作完后调用dispatch_semaphore_signal来释放资源

dispatch_semaphore_create(0);
信号量为0则阻塞线程,大于0则不会阻塞。则我们通过改变信号量的值,来控制是否阻塞线程,从而达到线程同步。

for (int i = 0; i < array.count; i++) {
        
            PHAsset *asset = array[i];     
            PHVideoRequestOptions*option = [[PHVideoRequestOptions alloc]init];
            option.networkAccessAllowed = YES;
            __block NSData *resultData;
            dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
            
            [[PHImageManager defaultManager]requestAVAssetForVideo:asset options:option resultHandler:^(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info) {
                AVURLAsset* myAsset = (AVURLAsset*)asset;
                resultData = [NSData dataWithContentsOfURL:myAsset.URL];
                dispatch_semaphore_signal(semaphore);
                
            }];
            dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);

            [formData appendPartWithFileData:resultData name:@"" fileName:@"" mimeType:@""]; //
        
    }
上一篇下一篇

猜你喜欢

热点阅读