Spec-Zone.ru › GCC 14

8.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-13.3.0/gcc/Fast-enumeration-details.html

Spec-Zone.ru

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