Objective-C常量:NSString的比较使用==吗?

5

我发现关于设置NSString常量的讨论,让我按以下方式编写代码:

.h文件:

extern NSString * const kSectionHeaders;

.m文件:

NSString * const kSectionHeaders = @"header";

随着程序的运行,它必须将文本文件中的单词与一系列NSString常量进行比较测试。
我阅读到当设置函数时,内存比较应该起作用,如上所述:
if (property == kSectionHeaders) {...}

不起作用,太难了 :( 以下方法可行,但被描述为一个糟糕的解决方案(速度较慢,还有什么?):

if ([property isEqualToString:kSectionHeaders]){...}

我感觉我做错了什么,但是不知道是什么!请帮忙解决 :-) 谢谢! J.

3个回答

8

== 进行的是 指针 比较,它不会比较两个对象的值。使用 isEqualToString:(通常情况下使用 isEqual:)是正确的做法 - 它被描述为“不好的解决方法”在哪里?


1
嗨,感谢您的输入。我在SO的讨论中读到了这个问题。无法回到那里,但请参见此链接(https://dev59.com/tXRB5IYBdhLWcg3wuZQ1#539191),其中作者坚持认为==的工作效果很好。但是您的解释最好,并且也最有效;) 谢谢。 - Jem

6

记住,变量名只是指向内存中对象的指针。

== 运算符比较指针。除非它在比较内存中完全相同的对象,否则它不会返回 true。

isEqualToString: 是你最好的选择。不要过于担心速度问题。设备足够快,可以在眨眼间进行比较。真正需要注意时间的是屏幕绘制和磁盘读取。


4

谁说这是个糟糕的解决方案?这是解决手头问题唯一正确的方法。


感谢您确认这是正确的方法。例如,请参见https://dev59.com/tXRB5IYBdhLWcg3wuZQ1#539191,其中“==”被描述为正确的方式。 - Jem

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接