Стиль обработки ошибок Cocoa/iOS без NSError

Это общий вопрос об обработке возможных ошибок, когда NSError не используется.

Допустим, у нас есть типичный код iOS/Cocoa, подобный этому:

NSXMLParser *parser = [[NSXMLParser alloc] initWithData: myData];

В документации указано, что будет возвращен объект NSXMLParser или «ноль, если произойдет ошибка».

(Для справки, этот конкретный метод с радостью примет nil в качестве аргумента «данные», возвращая действительный экземпляр NSXMLParser.)

Я заметил, что очень многие разработчики iOS никогда не проверяют эти типы возвращаемых значений. Они предполагают, что класс init работал всегда. Это кажется мне рискованным, но я хотел бы услышать мнение опытных/укушенных разработчиков Cocoa.

Если я использую NSAssert для возвращаемого значения, это защищает меня во время разработки, но мало что дает мне, когда мое приложение находится в свободном доступе.

Должен ли я проверять возвращаемое значение nil и создавать собственный NSError? Или сделать что-то еще?


person Womble    schedule 08.01.2014    source источник
comment
@ Брайан, это я спрашиваю. Как бы вы справились с этой конкретной ошибкой?   -  person Womble    schedule 08.01.2014
comment
я просто использую NSAssert, чтобы проверить, что это не ноль. если произойдет ошибка, я получу нулевой синтаксический анализатор и не выполню никакой работы. надеюсь, это лучшее, что я могу получить.   -  person Bryan Chen    schedule 08.01.2014
comment
@Abizern, если вы погуглите эту строку кода, вы найдете много результатов. Подавляющее число реализаций не проверяют возвращаемое значение. Это может быть просто из-за реализации образца/фрагмента, но я подозреваю, что общий подход тот же. Но если вы хотите поделиться с нами своим подходом, я рад выслушать.   -  person Womble    schedule 08.01.2014
comment
Не уверен, почему вы здесь проголосовали против .... Я подумал, что это хороший вопрос о передовой практике. (Я думаю, проблема в том, что у Apple их на самом деле нет, или они не следят за ними, и их ошибки постоянно проходят мимо QA. Так что Apple Fan Boi не знают ничего лучше, когда следуют за толпой).   -  person jww    schedule 08.01.2014


Ответы (1)


Несколько неписаное правило заключается в том, что если метод инициализации Apple может дать восстанавливаемый сбой, он будет иметь параметр NSError. Если такой метод, как NSString, не работает, все настолько плохо, что восстановление действительно невозможно. Вероятно, настолько плохо, что выделение сообщения NSError невозможно, а тем более сообщения NSLog. Приложение, вероятно, скоро выйдет из строя, независимо от того, что вы делаете.

К сожалению, сторонние классы редко следуют этому правилу, но вы должны.

person zaph    schedule 08.01.2014
comment
Спасибо, Заф, за ваш продуманный и внимательный ответ. Я воспользуюсь вашим подходом. - person Womble; 08.01.2014