【问题标题】:Static Analyser Warning on returned doubles?返回双打的静态分析器警告?
【发布时间】:2011-01-06 22:19:33
【问题描述】:

我从 Xcode 3.2.5 静态分析器收到一个我不太明白的警告,警告是:

警告:消息的接收者 'horizo​​ntalAccuracy' 为零并且 返回一个类型的值 'CLLocationAccuracy' 将是 垃圾 如果([最后一个好位置 水平精度]

代码编译并运行良好,但我只是好奇发生了什么以及如何修复它。

@property (nonatomic, retain) CLLocation *lastGoodLocation;

@synthesize lastGoodLocation;

.

// CHECK FOR BEST LOCATION
if(lastGoodLocation == nil || [newLocation horizontalAccuracy] < [lastGoodLocation horizontalAccuracy]) {
    NSLog(@"NEWBEST: %0.0fm (%@)", [newLocation horizontalAccuracy], [newLocation timestamp]);
    [self setLastGoodLocation:newLocation];

    // DESIRED ACCURACY & GEOCODE
    if([lastGoodLocation horizontalAccuracy] <= DESIREDACCURACY) {

编辑:

newLocation能否返回nil,这段代码在:

locationManager:didUpdateToLocation:fromLocation:

【问题讨论】:

    标签: iphone objective-c cocoa-touch


    【解决方案1】:

    lastGoodLocation 为nil 时(|| 条件的左侧),您可以进入外部if,并且在该if 块内,您调用[lastGoodLocation horizontalAccuracy] 可能为nil参考。将内部 if 更改为类似

    // DESIRED ACCURACY & GEOCODE
    if (lastGoodLocation != nil && ([lastGoodLocation horizontalAccuracy] <= DESIREDACCURACY))
    

    可能是#setLastGoodLocation 实际设置了lastGoodLocation,但分析器可能没有发现。

    编辑:

    developer.apple.com 的文档建议虽然 oldLocation 可能为零(在第一次修复中),但 newLocation 可能不应该是 - 如果位置不起作用,我认为您会收到 #locationManager:didFailWithError:

    【讨论】:

    • ... 但是如果 newLocation 也为零怎么办。对 Horizo​​ntalAccuracy 的内部调用应该有一个 test-for-nil。
    • 非常感谢,我很确定代码没问题,就像你说它的分析器缺少“setLastGoodLocation”,现在我添加了“lastGoodLocation!= nil”,它消​​除了警告。稍后我会考虑重构代码,看看我是否可以把事情收紧一点。
    • @bbum:我认为静态分析器消息是虚假的。如果您查看此文档,发送返回 double 到 nil 的消息明确定义为返回 0。developer.apple.com/library/mac/documentation/Cocoa/Conceptual/… 如果您同意我的观点,我将向 Apple 提交错误报告。
    • 这是静态分析器中的一个错误,因为添加了 objc_msgSend_fpret() 来处理 msg-to-nil-with-double-return-on-i386 情况。忘记那个变种了。
    • 只是好奇我是否错过了这一点,在我的情况下,它不能为零,因为它之前被设置为 newLocation 。错误是错误的,因为返回 double 到 nil 应该是 0。但在这种情况下,分析器也无法看到/理解 [self setLastGoodLocation: newLocation];
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2011-08-13
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多