gpt4 book ai didi

iphone - NSAssert 在线程中的使用

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

我正在尝试在我的 iPhone 应用程序中使用 NSAssert,这样如果出现意外情况,应用程序会快速失败并崩溃并在崩溃日志中显示一条有意义的消息。

如果失败的 NSAssert 在主线程上,这可以正常工作,因为它默认引发 NSInternalInconsistencyException 未被捕获并停止执行。但我也在后台线程中进行处理,在这种情况下 NSAssert 只是中止线程,但程序继续运行。

我目前的解决方案是在主线程中捕获并重新抛出异常(在这种情况下,NSOperationmain 方法):

- (void)main {
@try {
int x = 14;
...
NSAssert1(x > 20, @"x should be greater than 20, was %d", x);
...
}
@catch (NSException *e) {
[e performSelectorOnMainThread:@selector(raise) withObject:nil waitUntilDone:YES];
}
}

有没有更好的方法?也许使用自定义 NSAssertionHandler?

我知道我可以将 C 的 assert 与静态注释一起使用:

assert(x > 20 && "x should be greater than 20");

但这不允许我显示 x 的实际失败值是多少。

最佳答案

您可以将 NSAssert 替换为测试代码,然后引发异常。这样,如果断言失败,将抛出异常,由 @catch block 捕获并在主线程上重新引发。

注意:您甚至可以定义一个 C 宏,以提供紧凑的形式。

关于iphone - NSAssert 在线程中的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2015788/

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