7

XCodeに使用している便利なヒントの1つは、例外にブレークポイントを追加することです。

なぜ2つのブレークポイントを追加する必要があるのか​​疑問に思いました。1つはfor objc_exception_throw、もう1つはfor[NSException raise]です。

一方がカバーし、もう一方がカバーしないケースは何ですか?

4

2 に答える 2

4

でのみブレークポイントを使用する必要があります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は機能します。

于 2012-06-19T13:13:11.277 に答える