gpt4 book ai didi

objective-c - objc_exception_throw 和 [NSException raise] 有什么区别?

转载 作者:太空狗 更新时间:2023-10-30 03:38:02 30 4
gpt4 key购买 nike

我一直在使用 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 raise] 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11038083/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com