objective-c NSString:isEqual 与 isEqualToString
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/1292862/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
NSString: isEqual vs. isEqualToString
提问by Jaka Jan?ar
What is the difference between isEqual:and isEqualToString:?
isEqual:和 和有isEqualToString:什么区别?
Why are classes adding isEqualTo* methods (isEqualToArray for NSArray, isEqualToData for NSData, ...) instead of just overriding isEqual:?
为什么类要添加 isEqualTo* 方法(NSArray 的 isEqualToArray,NSData 的 isEqualToData,...)而不是仅仅覆盖isEqual:?
回答by Abizern
isEqual:compares a string to an object, and will return NOif the object is not a string. isEqualToString:is faster if you know both objects are strings, as the documentationstates:
isEqual:将字符串与对象进行比较,NO如果对象不是字符串则返回。isEqualToString:如果您知道两个对象都是字符串,速度会更快,如文档所述:
Special Considerations
When you know both objects are strings, this method is a faster way to check equality than
isEqual:.
特别注意事项
当您知道两个对象都是字符串时,此方法是检查相等性的一种比 更快的方法
isEqual:。
isEqualTo<Class>is used to provide specific checks for equality. For instance; isEqualToArray:checks that the arrays contain an equal number of objects, and that the objects at a given index return YESfor the isEqual:test.
isEqualTo<Class>用于提供特定的相等性检查。例如; isEqualToArray:检查数组是否包含相同数量的对象,并且给定索引处的对象返回YES用于isEqual:测试。
回答by Jonathan Dann
Also, for writing your own -isEqual:and -isEqualTo<Class>:methods, the convention is to allow nil arguments for -isEqual:and raise an exception for nil arguments to -isEqualTo<Class>:
另外,编写自己-isEqual:和-isEqualTo<Class>:方法,惯例是允许零论点-isEqual:,提高了无参数异常-isEqualTo<Class>:
回答by respectTheCode
Expanding on @Abizern and @Jonathan Dann answers, both isEqualand isEqualToStringwork with nilvalues.
扩展@Abitern 和@Jonathan Dann 的答案,isEqual并isEqualToString与nil价值观一起工作。
- (void)testStringEqual {
NSString *string = nil;
STAssertFalse([string isEqual:@"test"], @"NSString isEqual");
STAssertFalse([string isEqualToString:@"test"], @"NSString isEqualToString");
// Note that these both return NO
STAssertFalse([string isEqual:nil], @"NSString isEqual");
STAssertFalse([string isEqualToString:nil], @"NSString isEqualToString");
string = @"test";
STAssertTrue([string isEqual:@"test"], @"NSString isEqual");
STAssertTrue([string isEqualToString:@"test"], @"NSString isEqualToString");
STAssertFalse([string isEqual:nil], @"NSString isEqual");
STAssertFalse([string isEqualToString:nil], @"NSString isEqualToString");
}
回答by iKenndac
My guessis that it provides a slight performance enhancement, as isEqualToString: won't have to type-check what's passed in.
我的猜测是它提供了轻微的性能增强,因为 isEqualToString: 不必对传入的内容进行类型检查。

