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

时间:2012-01-23 22:17:54

标签: objective-c nsstring constants equals string-comparison

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

.h文件:

extern NSString * const kSectionHeaders;

.m文件:

NSString * const kSectionHeaders = @"header";

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

我读取内存比较应该在设置如上所述的功能时起作用:

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

不起作用:( 以下工作,但它被描述为一个糟糕的解决方案(更慢,还有什么?):

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

我觉得我做错了什么。但看不出来的是什么! 请帮忙 :-) 谢谢! 学家

3 个答案:

答案 0 :(得分:7)

==执行指针比较,它不会比较两个对象的值。 isEqualToString:(以及一般isEqual:)是正确这样做的方式 - 它被描述为“糟糕的解决方案”?

答案 1 :(得分:5)

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

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

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

答案 2 :(得分:3)

谁形容这是一个糟糕的解决方案?它是解决当前问题的唯一正确/正确的解决方案。