Ответ 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
).