【问题标题】:Objective-C constants: NSString comparison using ==?Objective-C 常量:使用 == 的 NSString 比较?
【发布时间】:2012-01-23 22:17:54
【问题描述】:

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

.h 文件:

extern NSString * const kSectionHeaders;

.m 文件:

NSString * const kSectionHeaders = @"header";

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

当设置上述功能时,我读取内存比较应该起作用:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    == 进行指针 比较,它不会比较两个对象的值。 isEqualToString:(通常是isEqual:)是正确的方法——它在哪里被描述为“糟糕的解决方案”?

    【讨论】:

    • 您好,感谢您的意见。我在关于 SO 的讨论中读到了这一点。无法回头,但是请参阅此 [链接] (stackoverflow.com/a/539191/987818),其中作者坚持 == 如何运作良好。但你的解释感觉最好。而且效果最好;)谢谢。
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      谁将其描述为糟糕的解决方案?这是解决手头问题的唯一正确/正确的解决方案。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-08
      • 2011-10-25
      • 1970-01-01
      • 2013-01-16
      • 1970-01-01
      相关资源
      最近更新 更多