обработка ошибок и обработка исключений в цели c - PullRequest
1 голос
/ 14 марта 2011

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

Допустимо ли это предположение? или как мне их понять?

Ответы [ 2 ]

3 голосов
/ 14 марта 2011

Вы должны использовать исключения для ошибок, которые никогда не появятся, если программист проверит параметры для метода, который генерирует исключение. Например. делите на 0 или на общеизвестное исключение "вне границ", которое вы получаете от NSArrays.

NSErrors - ошибки, с которыми программист ничего не мог поделать. Например. парсинг файла plist Было бы напрасной тратой ресурсов, если бы программа проверила, является ли файл допустимым списком, прежде чем попытаться прочитать его содержимое. Для проверки правильности программа должна проанализировать весь файл. И анализ файла, чтобы сообщить, что он действителен, чтобы вы могли проанализировать его снова, был бы полной тратой. Таким образом, метод возвращает NSError (или просто nil, который сообщает вам, что что-то пошло не так), если файл не может быть проанализирован.

Парсинг на достоверность - это часть "программист должен был проверить параметры". Это не применимо для ошибок этого типа, поэтому вы не должны выдавать исключение.


Теоретически вы можете заменить исключение вне границ на return nil. Но это приведет к очень плохому программированию.


Apple говорит:

Важно : во многих средах использование исключений является довольно распространенным явлением. Например, вы можете выдать исключение, чтобы указать, что подпрограмма не может выполняться нормально - например, когда файл отсутствует или данные не могут быть проанализированы правильно. Исключения являются ресурсоемкими в Objective-C. Вы не должны использовать исключения для общего управления потоком или просто для обозначения ошибок. Вместо этого следует использовать возвращаемое значение метода или функции, чтобы указать, что произошла ошибка, и предоставить информацию о проблеме в объекте ошибки.

0 голосов
/ 14 марта 2011

Я думаю, что вы абсолютно правы в своем допущении об ошибках, и для него фреймворк предоставляет набор методов (обработка ошибок UIWebView), но ваше допущение для исключения частично верно, потому что исключение произошло только в том случае, если мы делаем что-то неправильно, что недопустимо на основе и может быть исправлено. (например, доступ к члену из массива за его пределами). и приведет к сбою приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...