美文网首页
iOS Swift GCD-信号量

iOS Swift GCD-信号量

作者: 轩辕小羽 | 来源:发表于2016-05-10 23:16 被阅读1293次

前言

先开个坑..慢慢更新...

Code

如果你有一个不知名的第三方库用block回调,你需要等他们都处理完了再执行你的方法,就用下面的方法

        // 存储图片data的数组
        var imageArr:Array<NSData> = []
        
        
        let globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
        // 创建信号量,初始化为0,碰到wait会停住,等有signal响应了才会执行下一步
        let semaphore =  dispatch_semaphore_create(0)
        
        // 开辟新线程
        dispatch_async(globalQueue, { () -> Void in
            // 遍历第三方model数组
            for i in 0..<modelAr.count {
                
                // 一些第三方需要的参数
                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存到我要用的数组里
                        imageArr.append(data)
                        //加1,可以执行下一次for循环了
                        dispatch_semaphore_signal(semaphore)
                        
                    }
                })
                // 减一,挡住,等有signal时才会执行下一次for循环
                dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER)
            }
            
            
            // for循环里面的所有block都执行完了
            XTStatusCloud.shareSingleOne.saveNewStatus(dataArr: imageArr, context: text) { (success, error) in
                
            }
        })

相关文章

网友评论

      本文标题:iOS Swift GCD-信号量

      本文链接:https://www.haomeiwen.com/subject/qrwyrttx.html