XCodeに使用している便利なヒントの1つは、例外にブレークポイントを追加することです。
なぜ2つのブレークポイントを追加する必要があるのか疑問に思いました。1つはfor objc_exception_throw、もう1つはfor[NSException raise]です。
一方がカバーし、もう一方がカバーしないケースは何ですか?
XCodeに使用している便利なヒントの1つは、例外にブレークポイントを追加することです。
なぜ2つのブレークポイントを追加する必要があるのか疑問に思いました。1つはfor objc_exception_throw、もう1つはfor[NSException raise]です。
一方がカバーし、もう一方がカバーしないケースは何ですか?
でのみブレークポイントを使用する必要がありますobjc_exception_throw。メソッドは を-[NSException raise]呼び出すobjc_exception_throwので、objc_exception_throwカバーするすべてのケースを-[NSException raise]カバーします。逆は正しくありません。ディレクティブは直接@throw呼び出すようにコンパイルされています。objc_exception_throwこの方法は違いを示しています。
- (void)throwAndCatch
{
@try {
NSException *exception = [[NSException alloc] initWithName:@"Test"
reason:@"test"
userInfo:nil];
@throw exception;
}
@catch (NSException *exception) {
NSLog(@"Caught");
}
}
を呼び出す-throwAndCatch場合、ブレークポイント オン-[NSException raise]は効果がありませんが、ブレークポイント オンobjc_exception_throwは機能します。