我正在尝试在NSAssert整个 iPhone 应用程序中使用,以便如果发生意外情况,应用程序会快速失败并在崩溃日志中显示有意义的消息而崩溃。
如果失败发生NSAssert在主线程上,这可以正常工作,因为NSInternalInconsistencyException默认情况下它会引发未捕获并停止执行。但我也在后台线程中进行处理,在这种情况下NSAssert只是中止线程,但编程继续运行。
我目前的解决方案是在主线程中捕获并重新抛出异常(在本例中为NSOperation'smain方法):
- (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?
我知道我可以将 Cassert与静态注释一起使用:
assert(x > 20 && "x should be greater than 20");
但这不允许我展示实际失败的价值x是什么。