2012-01-23 48 views
4

我发现有关设置的NSString常数的讨论使我的代码是通过以下方式:Objective-C常量:使用==的NSString比较?

.h文件中:

extern NSString * const kSectionHeaders; 

.m文件:

NSString * const kSectionHeaders = @"header"; 

在程序运行时,它必须针对一系列NSString常量测试文本文件中的单词。

我阅读设置功能时,就像上面说的比较记忆应该工作:

if (property == kSectionHeaders) {...} 

不行的强硬:( 下面的作品,但它被描述为一个坏的解决方案(慢,还有什么? ):

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

我觉得我做错了什么,但看不到什么 请:-) 感谢帮助。! J.

回答

5

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

==操作数比较指针。除非它比较内存中完全相同的对象,否则它不会成立。

isEqualToString:是你最好的选择。不要太担心速度。这些设备足够快,足以在眨眼之间进行比较。真正需要花费时间的事情是在屏幕上画画并从磁盘读取数据。

+0

嘿感谢您的信息和提示,非常有帮助。 – Jem

7

==确实指针比较,它不会比较两个对象的值。 isEqualToString:(和一般isEqual:正确方式做到这一点 - 它被描述为一个“不好的解决方案”?

+0

嗨,谢谢你的输入。我在关于SO的讨论中读到了这一点。无法回到它,但看到这一个[链接](http://stackoverflow.com/a/539191/987818)作者坚持如何运作良好。但你的解释是最好的。并且最好的工作;)谢谢。 – Jem

3

谁形容这是一个不好的解决方案?这是解决手头问题的唯一正确方法。

+0

感谢您确认这是正确的方法。参见http://stackoverflow.com/a/539191/987818其中==被描述为正确的方式。 – Jem