Ios XCode 6.3警告:比较';myObject';不等于空指针始终为真

Ios XCode 6.3警告:比较';myObject';不等于空指针始终为真,ios,objective-c,xcode,warnings,Ios,Objective C,Xcode,Warnings,更新到XCode 6.3后,编译器开始发出此警告 不等于空指针的“myObject”地址的比较始终为真。 这是我的一段代码 这让我摸不着头脑,但没有找到任何解决方案或解决办法来摆脱这个警告 我的问题与问题结束联系在一起。但是,它不能用讨论的答案来解决 欢迎提供任何帮助:)检查指针的正确方法是 if (anotherInView != nil) { } 您正在将变量的地址与NULL进行比较。每个变量都有一个地址不能有一个地址为NULL的变量,可以有一个值为NULL 另外anotherRect!

更新到XCode 6.3后,编译器开始发出此警告

不等于空指针的“myObject”地址的比较始终为真。

这是我的一段代码

这让我摸不着头脑,但没有找到任何解决方案或解决办法来摆脱这个警告

我的问题与问题结束联系在一起。但是,它不能用讨论的答案来解决


欢迎提供任何帮助:)

检查指针的正确方法是

if (anotherInView != nil) {
}
您正在将变量的地址与
NULL
进行比较。每个变量都有一个地址不能有一个地址为
NULL
的变量,可以有一个值为
NULL


另外
anotherRect!=NULL
再次无效
另一个rect
将始终有一个值,因为它是一个
结构

这里有四个错误。前两个问题是,您没有为CGRect和UIView变量设置任何初始值,因此无法检测故障。如果您认为这很有用,可以尝试将CGRect设置为零宽度、零高度的rect,并将UIView设置为nil

第三个和第四个错误是局部变量的地址从不为空。(请注意,对于库中的全局变量,情况并非如此,正如我在另一条评论中提到的,如果您正在运行的操作系统版本上不存在符号,则NSString指针常量的地址可能为空,但对于局部变量,您可以保证有一个地址,直到堆栈溢出和应用程序崩溃为止。)


我也不明白为什么您自己调用委托方法。通常,操作系统本身会调用这些方法,因此自己调用它们在某种程度上是不典型的用法。公平地说,我有时会在委托方法执行代码中其他地方需要的计算时这样做,我也会在实现调用其他委托的委托时这样做,但在这个问题的上下文中,这似乎是一个潜在的错误。

对于第一条指令,a改为:

 if (!CGRectIsNull(anotherRect)) {

 }

这可以被抑制吗?我想知道这个特殊的比较问题是否可以被抑制,因为它发生在我们不想修改的第三方子模块中。相反,我们修复了这个问题(根据Inder Kumar Rathore的答案)并解决了它。这是一个很好的类,但遗憾的是作者似乎没有维护它。我决定自己动手解决一些警告问题。你可以在这里找到我的叉子:@DannySung谢谢你修好它:)事实上不是这样的。这些位以这种方式写入,以检测符号是否存在于较旧的平台上。您收到此警告是因为您的最小目标足够新,它始终存在。但是,如果您以较旧的操作系统为目标,并尝试测试指针本身的值,您将得到一个segfault,因为指针的地址不存在,更不用说该指针的值了。(是的,弱链接很可怕。)纠正:在这种情况下,这是一个错误。这并不总是一个错误,因为这种构造可以用于我提到的原因。在评论之前,我没有仔细阅读代码。:-)