NSString:isEqual vs. isEqualToString

Jak*_*čar 94 iphone cocoa objective-c nsstring

isEqual:和之间有什么区别isEqualToString:

为什么类添加了isEqualTo*方法(NSArray的isEqualToArray,NSData的isEqualToData,...)而不仅仅是覆盖isEqual:

Abi*_*ern 103

isEqual:将字符串与对象进行比较,NO如果对象不是字符串,则返回.isEqualToString:如果您知道两个对象都是字符串,则速度会更快,因为文档说明:

特别注意事项

当您知道两个对象都是字符串时,此方法是检查相等性的更快方法isEqual:.

isEqualTo<Class>用于提供相等的特定检查.例如; isEqualToArray:检查该阵列包含对象的数目相等,并在给定的索引返回的对象YESisEqual:试验.

  • 如果你相信Aaron Hillegass那么没有性能差异,只有一点类型安全:http://blog.bignerdranch.com/334-isequal-vs-isequaltostring/ (3认同)
  • 感谢您的链接 - 有用.虽然你要我们相信Mark Dalrymple - 我是谁:) (2认同)

Jon*_*ann 16

另外,对于编写自己的方法-isEqual:-isEqualTo<Class>:方法,约定是允许nil参数,-isEqual:并为nil参数引发异常-isEqualTo<Class>:

  • 有趣的是,它记录在<a href ="http://developer.apple.com/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/CocoaObjects.html#//apple_ref/doc/uid/TP40002974-的对象比较部分中. CH4-SW31">可可基础指南</a> (9认同)
  • 对于isEqualToString似乎并非如此,如果您传入nil,它只会返回NO。 (2认同)

iKe*_*dac 5

我的猜测是它提供了轻微的性能增强,因为isEqualToString:不必进行类型检查传入的内容.


res*_*ode 5

扩大对@Abizern和@Jonathan丹恩的答案,既isEqualisEqualToString一起工作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");
}
Run Code Online (Sandbox Code Playgroud)