我一直在使用XCode的一个有用技巧是adding breakpoints on exceptions

我想知道为什么我们需要添加两个断点-一个用于objc_exception_throw,另一个用于[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上的断点将起作用。

关于objective-c - objc_exception_throw和[NSException提高]有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11038083/

10-09 08:09