前言
先開個(gè)坑..慢慢更新...
Code
如果你有一個(gè)不知名的第三方庫用block回調(diào),你需要等他們都處理完了再執(zhí)行你的方法,就用下面的方法
// 存儲(chǔ)圖片data的數(shù)組
var imageArr:Array<NSData> = []
let globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
// 創(chuàng)建信號(hào)量,初始化為0,碰到wait會(huì)停住,等有signal響應(yīng)了才會(huì)執(zhí)行下一步
let semaphore = dispatch_semaphore_create(0)
// 開辟新線程
dispatch_async(globalQueue, { () -> Void in
// 遍歷第三方model數(shù)組
for i in 0..<modelAr.count {
// 一些第三方需要的參數(shù)
let model = modelAr[i]
let options = PHImageRequestOptions()
options.networkAccessAllowed = true
// 取出圖片的方法
PhotoImageManager.sharedManager.requestImageDataForAsset(model.data!, options: options, resultHandler: { (data, dataUTI, oritation, info) -> Void in
if let data = data {
// 操作成功,取出data存到我要用的數(shù)組里
imageArr.append(data)
//加1,可以執(zhí)行下一次for循環(huán)了
dispatch_semaphore_signal(semaphore)
}
})
// 減一,擋住,等有signal時(shí)才會(huì)執(zhí)行下一次for循環(huán)
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER)
}
// for循環(huán)里面的所有block都執(zhí)行完了
XTStatusCloud.shareSingleOne.saveNewStatus(dataArr: imageArr, context: text) { (success, error) in
}
})