从 NSException 子类化特定于应用程序的异常是一种好习惯吗?这样一来,一切都集中在一个类中,以便于管理。
例如
@interface AppException : NSException
+ (AppException *)InvalidSomething;
+ (AppException *)InvalidSomething2;
@end
从 NSException 子类化特定于应用程序的异常是一种好习惯吗?这样一来,一切都集中在一个类中,以便于管理。
例如
@interface AppException : NSException
+ (AppException *)InvalidSomething;
+ (AppException *)InvalidSomething2;
@end
不,继承 NSException 是不好的,因为它是一个不需要比现在更具体的类。此外,如文档中所述,如果抛出,子类可能无法接收正确的调用堆栈符号:
冒充 NSException 类的 NSException 子类或其他干扰异常引发机制的 API 元素可能无法获取此信息。
如果您希望抛出“预定义的异常”,您可以在 NSAssert 上编写一个宏。
#define BOAssert NSAssert(0, @"Something bad just happened");
如果您需要“特定于应用程序的异常”,请创建一个可以传递给+raise:format:
. 但请记住,Objective-C 不是 Java。异常不是控制流的一种方式,并且永远不应该这样使用(Cocoa-Touch 中没有任何东西可以被视为异常安全的)。因为异常是致命的,所以要认真考虑为什么你实际上需要抛出它们,以及在什么情况下——例如,UITableView 在更新到未定义状态时会抛出异常。