Исключения в 64-разрядных исполнимых программах
Время выполнения Objective C повторно реализовало механизм исключения для 64-разрядных исполнимых программ для обеспечения стоивший нулем @try
блоки и функциональная совместимость с исключениями C++.
Стоившие нулем блоки @try
64-разрядные процессы, вводящие стоивший нулем @try
блок не подвергается никакой потере производительности. Это непохоже на вызывающий механизм для 32-разрядных процессов, setjmp()
и выполняет дополнительный «бухгалтерский учет». Однако выдача исключения является намного более дорогой в 64-разрядных исполнимых программах. Для лучшей производительности в 64-разрядном необходимо выдать исключения только при необходимости.
Функциональная совместимость C++
В 64-разрядных процессах, исключения Objective C (NSException
) и исключение C++ является взаимодействующим. В частности, деструкторы C++ и Objective C @finally
когда механизм исключения раскручивает исключение, блоки соблюдают. Кроме того, значение по умолчанию ловят пункты — т.е. catch(...)
и @catch(...)
— может поймать и повторно бросить любое исключение
С другой стороны, пункт выгоды Objective C, берущий объект исключения с динамическим контролем типов (@catch(id exception)
) может поймать любое исключение Objective C, но не может поймать исключения C++. Так, для функциональной совместимости использовать @catch(...)
поймать каждое исключение и @throw;
повторно бросить перехваченные исключительные ситуации. В 32-разрядном, @catch(...)
имеет тот же эффект как @catch(id exception)
.