Это хорошая практика для создания подкласса от NSException для исключений для конкретного приложения?

Это хорошая практика для создания подкласса от NSException для исключений для конкретного приложения? Таким образом, все будет централизовано одним классом для облегчения управления.

например

@interface AppException : NSException

+ (AppException *)InvalidSomething;
+ (AppException *)InvalidSomething2;

@end

1 ответ

Нет, не очень хорошо создавать подкласс NSException, потому что это класс, который не должен быть более конкретным, чем он есть. Кроме того, подклассы, как отмечено в документации, могут не получить надлежащие символы стека вызовов, если выброшены:

Подклассы NSException, изображающие из себя класс NSException или подклассы или другие элементы API, которые мешают механизму создания исключений, могут не получить эту информацию.

Если вы хотите создать "предопределенные исключения", вы можете написать макрос в NSAssert.

#define BOAssert NSAssert(0, @"Something bad just happened");

Если вам нужны "исключения для конкретного приложения", создайте константу, которую вы можете передать +raise:format:, Имейте в виду, однако, что Objective-C не Java. Исключения не являются средством управления потоком и никогда не должны использоваться как таковые (ничто в Cocoa-Touch не может рассматриваться как безопасное исключение). Поскольку исключения являются фатальными, серьезно подумайте, зачем вам на самом деле нужно их выбрасывать, и в каких ситуациях, например, UITableView генерирует исключения, когда оно обновляется в неопределенное состояние.

Другие вопросы по тегам