Почему NSFastEnumeration работает быстро? - PullRequest
8 голосов
/ 09 декабря 2011

Кто-нибудь знает, действительно ли NSFastEnumeration действительно быстрее (как при исполнении во время выполнения), чем использование NSEnumerator или (для массивов) с использованием целочисленного счетчика и циклического прохождения элементы?

Если он действительно быстрее, как он достигает этой скорости?

Или, возможно, «быстрый» на самом деле относится к более быстрому при написании кода итерации?

Заранее спасибо.

Ответы [ 2 ]

6 голосов
/ 09 декабря 2011

В зависимости от контейнера, NSFastEnumeration, по крайней мере, так же быстро, как NSEnumerator, но обычно намного быстрее, поскольку требует меньше вызовов методов.

Вместо того, чтобы вызывать nextObject для каждого элемента в массиве, с NSFastEnumerator массив может сразу вернуть блок объектов в массиве C.Повторение этого массива C на в раз быстрее, чем выполнение большого количества вызовов методов, каждый из которых ищет и возвращает только один объект.

5 голосов
/ 09 декабря 2011

Fast enumeration не быстрее, чем любой цикл «for». В общем смысле это невозможно, потому что базовые циклы уже настолько оптимизированы, насколько это возможно.

Вместо этого fast enumeration быстрее, чем цикл «for» или «while», который извлекает данные на каждой итерации из объекта Objective-C, используя вызов метода Objective-C.

Это достигается путем выборки данных в пакетном режиме, что снижает накладные расходы при вызове метода на каждой итерации. Удаление вызова метода из внутренней части цикла также имеет преимущества оптимизации компилятора.

...