Spec-Zone.ru › GCC 10

Далее: Протокол быстрой переборки, Предыдущее: Синтаксис быстрой переборки, похожий на C99, Вверх: Быстрая переборка [Оглавление][Индекс]

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 для выполнения других действий, таких как поднятие исключения.

Далее: Протокол быстрой переборки, Предыдущее: Синтаксис быстрой переборки, похожий на C99, Вверх: Быстрая переборка [Оглавление][Индекс]

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

Spec-Zone.ru

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