布尔逻辑失败

Ian*_*971 0 iphone objective-c

我对布尔逻辑有一个奇怪的问题.我必须做一些愚蠢的事,但我无法弄清楚.在下面的代码中,firstMeasure.isInvisibleArea为true,measureBuffer1为nil.即使test1由于某种原因正在评估NO,它仍然会进入我的if语句.如果我使用注释掉的行,它可以正常工作.知道为什么会这样吗?

BOOL firstVisible = firstMeasure.isInVisibleArea;
BOOL notFirstVisible = !(firstMeasure.isInVisibleArea);
BOOL measureBufferNil = measureBuffer1 == nil;

BOOL test1 = measureBuffer1 == nil && !firstMeasure.isInVisibleArea;
BOOL test2 = measureBufferNil && !firstVisible;

if (measureBuffer1 == nil && !firstMeasure.isInVisibleArea)
//if (measureBufferNil && !firstVisible)    
{
    //do some action
}
Run Code Online (Sandbox Code Playgroud)

更新1:

我将问题隔离到!firstMeasure.isInVisibleArea,因为我完全接受了measureBuffer位.里面的isInVisible区域是一个小的计算(它不会修改任何东西),但计算是使用self.view.frame.我也会把这个从等式中拿出来看看会发生什么.我的预感是self.view.frame正在两次调用isInVisibleArea之间切换.


更新2:这确实是问题所在.我在下面更详细地添加了答案

Goa*_*der 5

如有疑问,您应该完全括号.在没有查找优先级规则的情况下,我认为正在发生的事情是=正在获得比==或&&更高的优先级.所以尝试:

BOOL test1 = ((measureBuffer1 == nil) && !firstMeasure.isInVisibleArea);
Run Code Online (Sandbox Code Playgroud)