Используйте dispatch_async для одновременного анализа массива в Swift
Я пытаюсь проанализировать фотографию одновременно, используя фоновую нить из 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.
РЕДАКТИРОВАТЬ Это мой обновленный код для одновременной обработки 8 процессоров.
dispatch_apply(8, imageQueue) { numStrips -> Void in
let color = self.photoAnalyzer.analyzeColors(imageStrips[numStrips])
colorList.append(color)
}
Тем не менее, если я пытаюсь использовать более 8, код на самом деле работает медленнее, чем последовательно.