【发布时间】:2015-01-11 20:55:57
【问题描述】:
我有一个简单的 NSLogv 包装器。它工作正常,除非在格式字符串中有太多占位符时抛出异常。我想捕捉那个异常,但是这个 @try 块不起作用。为什么?
- (void)error:(NSString *)formatString, ...;
{
@try {
va_list arglist;
va_start(arglist, formatString);
formatString = [NSString stringWithFormat:@"ERROR: %@", formatString];
NSLogv(formatString, arglist);
va_end(arglist);
}
@catch (NSException *exception) {
// Handle exception ...
}
}
下面是一个抛出异常的例子:
[[MYLogger error:@"%@ %@", value];
【问题讨论】:
-
为什么要捕获异常?您希望它崩溃,因为它是一个程序员错误。查找并修复开发和测试中的问题。
-
@try在 Objective-C 中应该只用于在发生异常时“优雅地失败”。它不能像 Java 异常那样随意使用。 -
捕获这个异常是最后一道防线;我不希望应用程序因为占位符数量错误的错误日志语句而崩溃。
-
@PhilMitchell 这就是测试的目的。此外,您可能应该编译出用于分发构建的日志。
-
@rmaddy 感谢您的意见。 NSLogv 确实不会在生产环境中被调用,但远程记录器会。
标签: ios objective-c exception nslog