我正在尝试使用 GCD 的后台线程同时分析照片。这是我写的代码:
dispatch_async(dispatch_get_global_queue(Int(QOS_CLASS_UTILITY.value), 0)) {
for (var i = 0; i < 8; i++)
{
let color = self.photoAnalyzer.analyzeColors(imageStrips[i])
colorList.append(color)
}
}
为了澄清变量名称,以下是它们的描述:
photoAnalyzer
是我编写的一个类的实例Analyzer
它包含处理图像的所有方法。
analyzeColors
是里面的一个方法Analyzer
执行大部分分析并返回带有传入图像的主色的字符串的类
imageStrips
是一个数组UIImage
组成原始图像的部分
colorList
是一个字符串数组,存储了返回值analyzeColor
图像每个部分的方法。
上面的代码从for
循环只访问一张图像imageList
一次。我想做的是分析每个图像imageStrips
同时,但我不知道如何去做。
任何建议将不胜感激。如果您想查看所有代码来进一步帮助我,我可以发布一个 GitHub 链接。
EDIT这是我更新的代码,用于同时处理 8 个处理器。
dispatch_apply(8, imageQueue) { numStrips -> Void in
let color = self.photoAnalyzer.analyzeColors(imageStrips[numStrips])
colorList.append(color)
}
但是,如果我尝试使用超过 8 个,代码实际上运行速度会比顺序运行慢。