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