偶尔我会找到测试两个NSString
是否相同的代码:
if ([str1 compare:str2] == NSOrderedSame) {
// Do something
}
现在,我认为这比使用isEqualToString:
更不易读,而且它也有一些令人讨厌的副作用,比如if str1 == nil
if(..)的计算结果为true,或{{1}根据Apple的文档,havoc可能会打破我们。 (编辑:正如hatfinch指出的那样,如果str2 == nil
这两种变体都会产生错误的结果。所以无论如何你都需要防范这种情况。)
但是在我讨论公司代码中的这些陈述之前,我想确保我没有错过一些重要的观点。
所以我的问题基本归结为:str1 == nil && str2 == nil
与compare:
和NSOrderedSame
之间是否存在差异?
答案 0 :(得分:12)
阅读文档,我发现你唯一没有提到的差异是:
isEqualToString:
首先比较两个字符串的id
,这是频繁重复使用字符串的应用程序中的潜在速度增益。来自NSString参考:
返回值:
如果aString等效于接收者(如果它们具有相同的id或者如果它们是字面比较中的NSOrderedSame),则为YES,否则为NO。
isEqualToString:
与compare: options:NSLiteralSearch
更相似,如上面的引文所示。 NSLiteralSearch对Unicode字符表示更加挑剔:
应用于字符串比较时,“Literal”意味着不应用各种Unicode分解规则,并且单独比较Unicode字符。因此,例如,“Ö”表示为组合字符序列“O”,而变音符号不会等于表示为一个Unicode字符的“Ö”。
与您提问中提到的误报和未定义行为相比,这真的只是挑剔。