Spec-Zone.ru › GCC 7

8.7 Исключения

GNU Objective-C предоставляет поддержку исключений, встроенную в язык, как показано в следующем примере:

@try {
  …
     @throw expr;
  …
}
@catch (AnObjCClass *exc) {
  …
    @throw expr;
  …
    @throw;
  …
}
@catch (AnotherClass *exc) {
  …
}
@catch (id allOthers) {
  …
}
@finally {
  …
    @throw expr;
  …
}

Оператор @throw может находиться в любом месте программы на Objective-C или Objective-C++; при использовании внутри блока @catch, оператор @throw может использоваться без аргумента (как показано выше), в этом случае объект, перехваченный @catch, будет повторно выброшен.

Обратите внимание, что с помощью этой схемы могут быть выброшены и перехвачены только (указатели на) объекты Objective-C. Когда объект выброшен, он будет перехвачен ближайшим @catch блоком, способным обработать объекты такого типа, аналогично тому, как работают catch блоки в C++ и Java. Блок @catch(id …) (как показано выше) также может быть предоставлен для перехвата всех исключений Objective-C, не перехваченных предыдущими @catch блоками (если таковые имеются).

Блок @finally, если он присутствует, будет выполнен при выходе из непосредственно предшествующего @try … @catch блока. Это произойдет независимо от того, были ли выброшены, перехвачены или повторно выброшены исключения внутри @try … @catch блока, аналогично поведению finally блока в Java.

Существует несколько ограничений при использовании нового механизма исключений:

  • При компиляции файлов Objective-C, использующих исключения, необходимо использовать опцию командной строки -fobjc-exceptions.
  • В случае использования GNU среды выполнения исключения всегда реализуются как «нативные» исключения, и рекомендуется использовать опции -fexceptions и -shared-libgcc при компоновке.
  • В случае использования NeXT среды выполнения, хотя в настоящее время она разработана для двоичной совместимости с NS_HANDLER-стилевыми выражениями, предоставляемыми классом NSException, новые исключения могут быть использованы только в системах Mac OS X 10.3 (Panther) и более поздних, из-за дополнительных функций, необходимых в NeXT среде выполнения Objective-C.
  • Как упоминалось выше, новые исключения не поддерживают обработку типов, отличных от объектов Objective-C. Кроме того, при использовании из Objective-C++, модель исключений Objective-C в настоящее время не взаимодействует с исключениями C++. Это означает, что вы не можете @throw исключение из Objective-C и catch его в C++, или наоборот (т.е., throw … @catch).

Далее: Синхронизация, Предыдущее: compatibility_alias, Вверх: Objective-C [Оглавление][Индекс]

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-7.5.0/gcc/Exceptions.html

Spec-Zone.ru

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