有时我会发现测试两个是否存在的代码NSString
s 是一样的:
if ([str1 compare:str2] == NSOrderedSame) {
// Do something
}
现在,我相信这比使用的可读性更差isEqualToString:
它也有一些令人讨厌的副作用,比如str1 == nil
if(..) 计算结果为 true,或者当str2 == nil
根据苹果文档,浩劫可能会降临到我们身上。 (Edit:正如哈特芬奇指出的那样,如果str1 == nil && str2 == nil
两种变体都会产生错误的结果。所以无论如何你都需要警惕这种情况)。
但在我反对公司代码中的这些声明之前,我想确保我没有错过一些重要的点。
所以我的问题基本上可以归结为:compare:
to NSOrderedSame
and isEqual:
?
阅读文档,我发现您尚未提到的唯一区别是:
-
isEqualToString:
首先比较id
两个字符串的组合,这对于频繁重复使用字符串的应用程序来说是潜在的速度增益。来自 NSString 参考:
返回值:
如果 String 相当于接收者(如果它们具有相同的 id 或者如果它们在文字比较中是 NSOrderedSet),则为 YES,否则为 NO。
-
isEqualToString:
确实更类似于compare: options:NSLiteralSearch
,如上面的引用所示。 NSLiteralSearch 对于 Unicode 字符表示更加挑剔:
“Literal”应用于字符串比较时意味着不应用各种 Unicode 分解规则,而是单独比较 Unicode 字符。因此,例如,表示为组合字符序列“O”和变音符号的“Ö”与表示为一个 Unicode 字符的“Ö”不相等。
与您问题中提到的误报和未定义行为相比,这实际上只是挑剔。
Source: NSString 类参考
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)