2012-01-23 39 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