如何有效地比较两个NSString

时间:2011-10-04 07:24:15

标签: objective-c

我知道可以使用方法compare:isEqualToString:,我认为isEqualToString是最有效的方法如果你知道它是一个字符串。但我的问题是,还有另一种方法可以更有效地做到这一点吗?比如char或char之类的比较。

3 个答案:

答案 0 :(得分:4)

阅读文档:

比较使用字符串的规范表示,对于特定字符串,字符串的长度加上构成字符串的Unicode字符。当此方法比较两个字符串时,如果单个Unicodes相同,则字符串相等,而不管后备存储。应用于字符串比较时,“Literal”表示不应用各种Unicode分解规则,并且单独比较Unicode字符。因此,例如,“Ö”表示为组合字符序列“O”,而变音符号不会比较等于表示为一个Unicode字符的“Ö”。

当您知道两个对象都是字符串时,此方法比isEqual更快速地检查相等性:。

似乎它是可用的最佳方法,比较字符串并且它完全符合您的需要,即:首先检查长度(如果2个字符串具有不同的长度,则不必检查每个包含的字符),然后,如果长度相同,则比较每个字符。简单而有效!

答案 1 :(得分:3)

如果您知道两个对象都是字符串,那么

isEqualToString:会更快,因为documentation状态。

答案 2 :(得分:1)

您可以尝试将两个字符串转换为C字符串,然后使用strcmp。怀疑它实际上会更快。

char *str1 = [myNSString1 UTF8String];
char *str2 = [myNSString2 UTF8String];
BOOL isEqual = strcmp(str1,str2);