Слово предостережения здесь. В Objective-C, в отличие от многих похожих языков, вы, как правило, должны стараться избегать использования исключений для общих ошибок, которые могут возникнуть при нормальной работе.
Документация Apple для Obj-C 2.0 гласит следующее: «Важно: Исключения являются ресурсоемкими в Objective-C. Вы не должны использовать исключения для общего управления потоком или просто для обозначения ошибок ( например, файл недоступен) "
Концептуальная документация Apple по обработке исключений объясняет то же самое, но несколькими словами: «Важно: вам следует зарезервировать использование исключений для программирования или непредвиденных ошибок времени выполнения, таких как доступ к коллекции за пределами допустимого, попытки чтобы изменить неизменяемые объекты, отправив недопустимое сообщение и потеряв соединение с оконным сервером. Обычно такие ошибки устраняются за исключением случаев, когда создается приложение, а не во время выполнения. [.....] Вместо исключения, объекты ошибок (NSError) и механизм доставки ошибок Какао являются рекомендуемым способом сообщения об ожидаемых ошибках в приложениях Какао. "
Причины этого частично связаны с программированием идиом в Objective-C (с использованием возвращаемых значений в простых случаях и ссылочных параметров (часто класса NSError) в более сложных случаях), частично из-за того, что выбрасывание и перехват исключений - это гораздо более дорогой и, наконец, (и, что наиболее важно) исключение Objective-C - это тонкая оболочка для функций setjmp () и longjmp () в C, что существенно портит вашу осторожную обработку памяти, см. это объяснение .