使用Dispatch Semaphore
dispatch_semaphore_t 類似信號量,可以用來控制訪問某一資源訪問數量翩伪。
使用過程:
1 先創(chuàng)建一個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:@""]; //
}