Подтвердить что ты не робот

Возвращаемые ошибки в objective-c

Im newish to objective-c, и я начинаю задаваться вопросом, что является обычным/стандартным/правильным способом обработки и обнаружения ошибок?

Кажется, что можно использовать NSError для этого, это хорошая идея или уловка cocoa?

4b9b3361

Ответ 1

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

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

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

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

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

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

Наконец, еще одна очень действительная точка:

  • Если вы используете объект error, переданный методу, возвращаемое значение должно указывать на него. Не пытайтесь сделать оба (вернуть частично действительный объект и установить объект error).