【发布时间】:2015-08-12 00:08:36
【问题描述】:
我正在编写一段代码,这些代码会根据类的配置方式进行一些繁重的数学运算。我目前在内部使用双打,因为它们为我正在做的事情提供了足够的精度。
最初,我编写的大多数方法都尽可能接受双精度数作为参数,主要是为了保持代码简洁。但是,这些相同的方法返回 NSNumber 对象,因为我使用 nil 来检查该方法是否实际返回了有效值(在某些情况下,代码可能会遇到非致命错误并返回 nil)。
所以我的典型代码如下所示:
MyMathClass *mathClass = [[MyMathClass alloc] init];
NSNumber *result = [mathClass doSomethingProfound:1234.0];
if (result == nil) {
// handle failure gracefully
} else {
NSLog(@"the number times 100 is %f", [result doubleValue] * 100);
}
但是,我并不完全清楚我为什么要费心将所有内容都包装在 NSNumber 类中以供返回。当时这似乎是一个好主意,但在 math.h 中挖掘让我发现了 NAN 和 isnan() 宏,我可能可以使用它们直接返回一个 double (没有中间 NSNumber 对象)并检测成功或相应地失败。
因此,我的代码将如下所示:
MyMathClass *mathClass = [[MyMathClass alloc] init];
double result = [mathClass doSomethingProfound:1234.0];
if (isnan(result)) {
// handle failure gracefully
} else {
NSLog(@"the number times 100 is %f", result * 100);
}
除了稍微简化一些事情并减少我要扔的对象的数量之外,编写这样依赖于 NAN 和 isnan() 来检测故障(而不是返回对象并检查为零)?
【问题讨论】:
标签: objective-c cocoa