Подтвердить что ты не робот

Перемещение ключа/значений NSDictionary, является enumerateKeysAndObjectsUsingBlock более эффективным, чем циклические ключи и вызов objectForkey:?

Мне нужно пройти все пары ключей/значений словаря и сделать что-то с обоими полями. Мне интересно, что более эффективно, традиционный подход "за ключ" или подход к блокам, используя enumerateKeysAndObjectsUsingBlock:.

Здесь у вас есть пример:

Традиционный подход (перед блоками)

for (NSString* key in [self.dictionary allKeys] ) {
    [self processKey:key value: [self.dictionary objectForKey:value ]];
}

Блокировка.

 [self.dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop){
        [self processKey:key value:obj];
    }]; 

Я чувствую, что перемещение пар ключ/значение с использованием блока происходит быстрее, но я не уверен, так как не знаю, как реализованы словари и конкретный блочный метод.

Любые мысли?

Спасибо заранее!

4b9b3361

Ответ 1

Вы должны использовать метод на основе блоков. Это быстрее, так как показано здесь. В частности, он не требует дополнительного поиска в словаре для захвата значения, что экономит производительность. Тем не менее, прирост производительности будет незначительным, если он не будет работать на достаточно больших словарях.

Ответ 2

Они были бы в основном одинаковыми - они оба являются синхронными обходами. Однако следующее будет допускать параллельный обход, который будет быстрее:

[self.dictionary enumerateKeysAndObjectsWithOptions:NSEnumerationConcurrent
                              usingBlock:^(id key, id object, BOOL *stop) {

}];