アプリ固有の例外のために NSException からサブクラス化することは良い習慣ですか? こうすることで、すべてが 1 つのクラスに集中化され、管理が容易になります。
例えば
@interface AppException : NSException
+ (AppException *)InvalidSomething;
+ (AppException *)InvalidSomething2;
@end
アプリ固有の例外のために NSException からサブクラス化することは良い習慣ですか? こうすることで、すべてが 1 つのクラスに集中化され、管理が容易になります。
例えば
@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 が未定義の状態に更新されると、例外がスローされます。