Возврат ошибок в цели-c

Если Вы хотите весь Ваш, удаляет для действия того пути, Вы могли бы проверить жадный - удаляют.

10
задан PeyloW 1 October 2009 в 19:16
поделиться

1 ответ

Я почти уверен, что класс NSError должен делать именно это - давать подробности об ошибках. Наиболее распространенный шаблон, который вы увидите, - это метод, который принимает указатель на объект NSError, например:

- (id)doSomethingWithArgument:(id)arg error:(NSError **)error

Метод возвращает некоторое значение (или, возможно, nil ) для результата выполнения чего-либо, но если вызов завершился неудачно, объект NSError будет помещен в переданный указатель с подробностями об ошибке. Ваша документация отвечает за определение того, что будет возвращено, если метод действительно обнаруживает ошибку.

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

Изменить: вау, Оказывается, многие люди имеют действительно твердое мнение об исключениях @throw . Подводя итог (весьма полезному) комментарию к проблеме:

  • Выбрасывание исключений чаще всего должно иметь дело с ошибкой программиста (ситуации, которые никогда не должны произойти, и т.п.); исключения не следует использовать для обычной обработки ошибок. Вместо этого используйте метод error , продемонстрированный выше, или опубликуйте экземпляры NSNotification.
  • Если вам все-таки придется широко использовать блоки @throw / @catch , будьте очень осторожны с окружающей их логикой. Objective-C предоставляет множество способов отсоединить методы для запуска в других потоках или отложить выполнение и т. Д. Будьте очень осторожны, чтобы учесть все эти возможности при написании кода.

Наконец, еще один очень важный момент:

  • Если вы действительно используете объект error , переданный методу, возвращаемое значение должно указывать на это. Не пытайтесь сделать и то, и другое (вернуть частично допустимый объект и установить объект error ).
17
ответ дан 3 December 2019 в 21:22
поделиться