Spec-Zone.ru › GCC 15

9.9.3 Подробное описание быстрого перебора

Ниже приведено более техническое описание со всеми подробностями. Рассмотрим код

for (object expression in collection expression)
{
  statements
}

вот что происходит при его выполнении:

  • collection expression вычисляется ровно один раз, а результат используется в качестве объекта коллекции для перебора. Это означает, что можно безопасно писать код, например for (object in [NSDictionary keyEnumerator]) ….
  • компилятор реализует перебор, многократно получая пакеты объектов из объекта коллекции с помощью протокола быстрого перебора (см. ниже), а затем перебирая все объекты в пакете. Это быстрее, чем обычный перебор, при котором объекты извлекаются по одному (отсюда и название «быстрый перебор»).
  • если в коллекции нет объектов, то object expression присваивается значение nil, и цикл немедленно завершается.
  • если в коллекции есть объекты, то для каждого объекта коллекции (в порядке их возврата) object expression присваивается этот объект, а затем выполняются statements.
  • statements может содержать команды break и continue, которые, как и ожидалось, прерывают перебор или переходят к следующей итерации цикла.
  • когда перебор заканчивается, потому что больше нет объектов, object expression присваивается значение nil. Это позволяет определить, завершился ли перебор из-за использования команды break (в этом случае object expression останется равным последнему перебранному объекту) или потому, что были перебраны все объекты (в этом случае object expression будет равно nil).
  • statements не должны вносить никаких изменений в объект коллекции; в противном случае возникает серьёзная ошибка, и быстрый перебор завершается вызовом objc_enumerationMutation — функции времени выполнения, которая обычно прерывает программу, но которую библиотеки Foundation могут настроить с помощью objc_set_mutation_handler так, чтобы она выполняла другое действие, например генерировала исключение.

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-15.3.0/gcc/Fast-enumeration-details.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API