Редактировать
Я прочитал некоторые статьи о блоках и быстром перечислении и GCD и тому подобное. @Bbum, который написал много статей на тему GCD и блоков, говорит, что методы перечисления блоков всегда бывают быстрее или быстрее, чем быстрые эквиваленты перечисления. Вы можете прочитать его рассуждения здесь .
Хотя это был увлекательный интеллектуальный разговор, я согласен с теми, кто сказал, что это действительно зависит от поставленной задачи.
У меня есть некоторые задачи, которые нужно выполнить, и мне нужно, чтобы они были выполнены быстро, дешево и эффективно. Apple дает нам много вариантов того, как мы хотим перечислить массив, но я не уверен, какой из них выбрать.
Быстрое перечисление
for (id obj in array)
{
/* Do something with |obj|. */
}
Перечисление непостоянных блоков
[array enumerateObjectsUsingBlock: ^(id obj, NSUInteger idx, BOOL *stop) {
/* Do something with |obj|. */
}];
Перечисление параллельных блоков
[array enumerateObjectsWithOptions: NSEnumerationConcurrent usingBlock: ^(id obj, NSUInteger idx, BOOL *stop) {
/* Do something with |obj|. */
}];
GCD Apply
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
dispatch_apply([array count], queue, ^(size_t idx) {
id obj = [array objectAtIndex: idx];
/* Do something with |obj|. */
});
GCD Async Apply
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
dispatch_async(queue, ^(void) {
dispatch_apply([array count], queue, ^(size_t idx) {
id obj = [array objectAtIndex: idx];
/* Do something with |obj|. */
});
});
Или, может быть, что-то с NSBlockOperation
с или NSOperationQueue
?
TIA, Алекс.