1

从 NSException 子类化特定于应用程序的异常是一种好习惯吗?这样一来,一切都集中在一个类中,以便于管理。

例如

@interface AppException : NSException

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

@end
4

1 回答 1

4

不,继承 NSException 是不好的,因为它是一个不需要比现在更具体的类。此外,如文档中所述,如果抛出,子类可能无法接收正确的调用堆栈符号:

冒充 NSException 类的 NSException 子类或其他干扰异常引发机制的 API 元素可能无法获取此信息。

如果您希望抛出“预定义的异常”,您可以在 NSAssert 上编写一个宏。

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

如果您需要“特定于应用程序的异常”,请创建一个可以传递给+raise:format:. 但请记住,Objective-C 不是 Java。异常不是控制流的一种方式,并且永远不应该这样使用(Cocoa-Touch 中没有任何东西可以被视为异常安全的)。因为异常是致命的,所以要认真考虑为什么你实际上需要抛出它们,以及在什么情况下——例如,UITableView 在更新到未定义状态时会抛出异常。

于 2013-01-30T22:55:38.243 回答