2014-01-08 3 views
1

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

Допустим, у нас есть некоторые типичные IOS/какао-код, как это:

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

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

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

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

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

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

+0

@ Брайан, это я прошу. Как бы вы справились с этой конкретной ошибкой? – Womble

+0

Я просто использую NSAssert, чтобы проверить, что это не ноль. если ошибка произойдет, я получу парсер nil и не сделаю никакой работы. надеюсь, это лучшее, что я могу получить. –

+1

@Abizern, если вы указали эту строку кода, вы найдете много результатов. Подавляющее число реализаций не проверяет возвращаемое значение. Это может быть просто из-за реализации примеров/фрагментов, но я подозреваю, что общий подход тот же. Но если вы хотите поделиться своим подходом с нами, я рад слушать. – Womble

ответ

4

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

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

+0

Спасибо, Заф, за ваш рассмотренный и внимательный ответ. Я возьму ваш подход. – Womble