首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSAssert使用率(以线程为单位

NSAssert使用率(以线程为单位
EN

Stack Overflow用户
提问于 2010-01-07 03:59:48
回答 1查看 3.7K关注 0票数 5

我正在尝试在我的iPhone应用程序中使用NSAssert,以便在发生意外情况时,应用程序会很快失败,并在崩溃日志中显示一条有意义的消息。

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

我当前的解决方案是捕获并重新抛出主线程中的异常(在本例中,是NSOperationmain方法):

代码语言:javascript
复制
- (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

代码语言:javascript
复制
assert(x > 20 && "x should be greater than 20");

但是这不允许我展示x的实际失败值是什么。

EN

回答 1

Stack Overflow用户

发布于 2010-01-07 17:33:18

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2015788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档