Мы пишем, что API для разработчиков iPhone и не знаем то, что лучшая практика для обработки исключений. Мы изучили NSError
, стандартный POSIX путь, NSException
Какова конвенция, которую использует большинство API? Который является большей частью "дружественного Objective C"?
Из Введение в темы программирования исключений :
Важно : следует зарезервировать использование исключений для программирования или непредвиденных ошибок времени выполнения, таких как доступ к коллекции за пределами границ, попытки изменять неизменяемые объекты, отправлять недопустимое сообщение и терять соединение с оконным сервером. Обычно вы устраняете подобные ошибки с исключениями, когда приложение создается, а не во время выполнения.
...
Вместо исключений рекомендуется использовать объекты ошибок (NSError) и механизм доставки ошибок Какао для сообщения ожидаемых ошибок в приложениях Какао. Для получения дополнительной информации см. Руководство по программированию обработки ошибок для какао .
Насколько я понимаю, используйте исключения только тогда, когда что-то не так. В противном случае используйте объекты NSError
.
+1 за NSError
.
Я забыл, где в документации Apple я читал это, но я также помню, что они поощряли философию кодирования «сначала попробуйте, затем проверьте на наличие ошибок», а не «проверьте на достоверность, а затем выполните операцию». Например, вместо того, чтобы проверять, доступна ли сеть перед ее использованием, просто попробуйте использовать ее и отреагируйте на ошибку, если / когда вы ее вернете.
Я согласен с этой философией во многих случаях использования, потому что (а) она переносит проверку валидности в момент действия, поэтому в определенном смысле она более точна, и (б, субъективно) работать с кодом в этом шаблон.
Подводя итог, предлагается использовать NSError
и обеспечить немедленную обратную связь с параметрами NSError **
, которые принимают NULL
, чтобы было очень удобно ваши API-пользователи! Этот шаблон также установлен в нескольких местах в Cocoa / Touch; например, метод NSString
writeToFile: атомарно: кодировка: ошибка: .