Цель C - Что такое самый быстрый и эффективный способ перечисления массива?

Edit

Я читал несколько статей о блоках и быстром перечислении, GCD и т.п. @ Бум, кто? Написано много статей по теме 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 s или NSOperationQueue ?

TIA, Alex.

26
задан Community 23 May 2017 в 12:31
поделиться