'左'的'左操作数'中的'垃圾值'是由“构建和分析”生成的“垃圾值”警告?

时间:2010-10-24 12:53:19

标签: objective-c cocoa-touch xcode ios

当我在Xcode中“构建并分析”这段代码时,我收到一条警告,我不明白。这是带问题的方法:

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
        UITouch * touch = [touches anyObject];
        CGPoint location = [touch locationInView:self];
        CGPoint relativePosition = CGPointMake(1.0-(location.x / self.bounds.size.width),location.y / self.bounds.size.height);
        [[Stage getSharedStage] movePartToLocation:relativePosition];
}

这是警告:

 warning: The left operand of '/' is a garbage value
         CGPoint relativePosition = CGPointMake(1.0-(location.x / self.bounds.size.width),location.y / self.bounds.size.height);
                                                     ~~~~~~~~~~ ^
1 warning generated.

以下是箭头: alt text

它试图告诉我什么?代码工作正常。

3 个答案:

答案 0 :(得分:6)

在没有看到整个函数的情况下很难分辨,但是我认为这意味着代码可以存在一个路径,其中location.x永远不会被初始化。可能是代码从未在测试中采用该路径,但可能存在。

编辑:我将在这里做一个疯狂的猜测并说这是因为[触及任何对象]可以想象地返回nil。在这种情况下,[touch locationInView:self]将返回垃圾(请记住向nil发送消息完全有效)。

尝试以(touch != nil)为条件使其余功能成为条件。

答案 1 :(得分:1)

'/'的左操作数是一个垃圾值,这表示告诉我们必须给location.x一个初始值,因为[touch locationInView:self]可能是nil,所以必须判断是否为if(touch) !=无)

答案 2 :(得分:0)

如果touch是nil,[touch locationInView:]将返回nil struct结果,在某个版本的llvm之前只能保证结构的第一个[指针大小]字节为零,其余的仍然是垃圾。

AFAIK [触及任何对象]永远不会是零,警告是误报。