NSString:isEqual与isEqualToString
isEqual:
和isEqualToString:
之间有什么区别?
为什么类添加isEqualTo *方法(NSArray的isEqualToArray,NSData的isEqualToData,…),而不是只是重写isEqual:
isEqual:
将string与对象进行比较,如果对象不是string,则返回NO
。 isEqualToString:
如果您知道两个对象都是string,则速度会更快,因为文档指出:
特别注意事项
当你知道这两个对象都是string的时候,这个方法比
isEqual:
检查等isEqual:
更快isEqual:
isEqualTo<Class>
用于为相等性提供特定的检查。 例如; isEqualToArray:
检查数组是否包含相等数量的对象,并且isEqual:
test的给定索引处的对象是否返回YES
。
此外,为了编写自己的-isEqual:
和-isEqualTo<Class>:
方法,约定是允许nil参数为-isEqual:
并为nil参数引发exception为-isEqualTo<Class>:
我的猜测是,它提供了一个轻微的性能增强,isEqualToString:将不必键入检查传入。
在@Abizern和@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"); }
我强烈推荐这个 。 对于大多数应用来说,isEqualToString的性能优势基本可以忽略不计。 但作者提到另外两个区别:
- types安全
- 处理方式
nil