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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-03 22:05:45  来源:igfitidea点击:

NSString: isEqual vs. isEqualToString

objective-ciphonecocoansstring

提问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 的答案,isEqualisEqualToStringnil价值观一起工作。

- (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: 不必对传入的内容进行类型检查。

回答by Ben Packard

I highly recommend this. The performance benefits of isEqualToString are basically negligible for most applications. But there are two other distinctions the author mentions:

我强烈推荐这个。isEqualToString 的性能优势对于大多数应用程序来说基本上可以忽略不计。但作者还提到了另外两个区别:

  • Type safety
  • The way nilis handled
  • 类型安全
  • 的方式nil被处理