1

アプリ固有の例外のために NSException からサブクラス化することは良い習慣ですか? こうすることで、すべてが 1 つのクラスに集中化され、管理が容易になります。

例えば

@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 に答える