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

Alf*_*nso 7 objective-c nsstring

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

if ([str1 compare:str2] == NSOrderedSame) {
    // Do something
}
Run Code Online (Sandbox Code Playgroud)

现在,我相信这比使用isEqualToString:它更不易读,它也有一些令人讨厌的副作用,比如如果str1 == nilif(..)评估为true,或者str2 == nil根据Apple文档可能会破坏我们.(编辑:正如hatfinch指出的那样,如果str1 == nil && str2 == nil两种变体都产生了错误的结果.那么无论如何你都需要防范这种情况).

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

所以我的问题基本上可以归结为:是否有任何区别compare:NSOrderedSameisEqual:

End*_*mic 12

阅读文档,我发现你还没有提到的唯一区别是:

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

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

  2. isEqualToString:compare: options:NSLiteralSearch在上面的引用中可以看出,它更像是类似的.NSLiteralSearch对Unicode字符表示更加挑剔:

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

与您的问题中提到的误报和未定义行为相比,这实际上只是挑剔.

来源:NSString类参考