使用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:@""]; //
}
网友评论