NSString compare:和isEqual(ToString)之间有区别吗?

时间:2010-05-20 20:09:12

标签: objective-c nsstring

偶尔我会找到测试两个NSString是否相同的代码:

if ([str1 compare:str2] == NSOrderedSame) {
    // Do something
}

现在,我认为这比使用isEqualToString:更不易读,而且它也有一些令人讨厌的副作用,比如if str1 == nil if(..)的计算结果为true,或{{1}根据Apple的文档,havoc可能会打破我们。 (编辑:正如hatfinch指出的那样,如果str2 == nil这两种变体都会产生错误的结果。所以无论如何你都需要防范这种情况。)

但是在我讨论公司代码中的这些陈述之前,我想确保我没有错过一些重要的观点。

所以我的问题基本归结为:str1 == nil && str2 == nilcompare:NSOrderedSame之间是否存在差异?

1 个答案:

答案 0 :(得分:12)

阅读文档,我发现你唯一没有提到的差异是:

  1. isEqualToString:首先比较两个字符串的id,这是频繁重复使用字符串的应用程序中的潜在速度增益。来自NSString参考:

      

    返回值:
      如果aString等效于接收者(如果它们具有相同的id或者如果它们是字面比较中的NSOrderedSame),则为YES,否则为NO。

  2. isEqualToString:compare: options:NSLiteralSearch更相似,如上面的引文所示。 NSLiteralSearch对Unicode字符表示更加挑剔:

      应用于字符串比较时,

    “Literal”意味着不应用各种Unicode分解规则,并且单独比较Unicode字符。因此,例如,“Ö”表示为组合字符序列“O”,而变音符号不会等于表示为一个Unicode字符的“Ö”。

  3. 与您提问中提到的误报和未定义行为相比,这真的只是挑剔。

    来源:NSString Class Reference