当我在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.
以下是箭头:
它试图告诉我什么?代码工作正常。
答案 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 [触及任何对象]永远不会是零,警告是误报。