4

自从上次更新 Xcode(到 v4.6)以来,我收到了一堆以下警告:

"Direct comparison of string a literal has undefined behavior"

这是通过这种方式将 NSString 属性与另一个字符串进行比较时:

if ([self.myString isEqualToString:@"Compare Me"]) { ...

最初我比较过,self.myString == @"Compare Me"但有相同的警告。Xcode 建议isEqual:改用。

我想知道为什么我应该这样做。其他比较仍然有效,例如:

if ([segue.identifier isEqualToString:@"nextScreen"]) { // => NO WARNING HERE

编辑:好的,对于不相信/downvoters 的任何人,请参阅此屏幕截图: 在此处输入图像描述

4

3 回答 3

3

有时 Xcode 会感到困惑并显示旧警告。我怀疑它显示了使用==. 清理构建,转到管理器窗口并删除该项目的派生数据,然后重新启动 Xcode。

于 2013-02-17T17:31:32.500 回答
0

基本上(根据this other stackoverflow answer,您应该将任何==字符串比较切换为使用isEqualor isEqualToString

为了方便起见,我在 bignerdranch 的博客上发现了这篇文章,说 和 之间没有区别(在可观察的人类世界中)isEqualisEqualToString所以我个人使用isEqual.

于 2013-09-08T18:16:17.860 回答
-2

当您使用“==”时,理论上(如在 C/C++ 中)它应该比较指针,而不是对象的值。

事实是 obj-c(我猜是编译器)会理解你真正想要的并在 isEqualToString 中转换它。但为了“安全”,最好使用 good 方法来比较两个字符串、两个数字等。

于 2013-02-17T17:16:14.463 回答