Что такое лучшие практики для обработки ошибок при записи API для iPhone?

Мы пишем, что API для разработчиков iPhone и не знаем то, что лучшая практика для обработки исключений. Мы изучили NSError, стандартный POSIX путь, NSException

Какова конвенция, которую использует большинство API? Который является большей частью "дружественного Objective C"?

11
задан Ovi Tisler 30 March 2010 в 15:03
поделиться

2 ответа

Из Введение в темы программирования исключений :

Важно : следует зарезервировать использование исключений для программирования или непредвиденных ошибок времени выполнения, таких как доступ к коллекции за пределами границ, попытки изменять неизменяемые объекты, отправлять недопустимое сообщение и терять соединение с оконным сервером. Обычно вы устраняете подобные ошибки с исключениями, когда приложение создается, а не во время выполнения.

...

Вместо исключений рекомендуется использовать объекты ошибок (NSError) и механизм доставки ошибок Какао для сообщения ожидаемых ошибок в приложениях Какао. Для получения дополнительной информации см. Руководство по программированию обработки ошибок для какао .

Насколько я понимаю, используйте исключения только тогда, когда что-то не так. В противном случае используйте объекты NSError .

14
ответ дан 3 December 2019 в 07:36
поделиться

+1 за NSError .

Я забыл, где в документации Apple я читал это, но я также помню, что они поощряли философию кодирования «сначала попробуйте, затем проверьте на наличие ошибок», а не «проверьте на достоверность, а затем выполните операцию». Например, вместо того, чтобы проверять, доступна ли сеть перед ее использованием, просто попробуйте использовать ее и отреагируйте на ошибку, если / когда вы ее вернете.

Я согласен с этой философией во многих случаях использования, потому что (а) она переносит проверку валидности в момент действия, поэтому в определенном смысле она более точна, и (б, субъективно) работать с кодом в этом шаблон.

Подводя итог, предлагается использовать NSError и обеспечить немедленную обратную связь с параметрами NSError ** , которые принимают NULL , чтобы было очень удобно ваши API-пользователи! Этот шаблон также установлен в нескольких местах в Cocoa / Touch; например, метод NSString writeToFile: атомарно: кодировка: ошибка: .

2
ответ дан 3 December 2019 в 07:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: