isEqual:
和之间有什么区别isEqualToString:
?
为什么类要添加isEqualTo *方法(对于NSArray是isEqualToArray,对于NSData是isEqualToData,...),而不是仅仅覆盖它们isEqual:
?
isEqual:
和之间有什么区别isEqualToString:
?
为什么类要添加isEqualTo *方法(对于NSArray是isEqualToArray,对于NSData是isEqualToData,...),而不是仅仅覆盖它们isEqual:
?
Answers:
isEqual:
比较字符串和对象,NO
如果对象不是字符串,则返回。isEqualToString:
如果您知道两个对象都是字符串,则速度会更快,如文档所述:
特别注意事项
当您知道两个对象都是字符串时,此方法是一种比更快的检查相等性的方法
isEqual:
。
isEqualTo<Class>
用于提供对相等性的特定检查。例如; isEqualToArray:
检查该阵列包含对象的数目相等,并在给定的索引返回的对象YES
的isEqual:
试验。
另外,为了编写自己的-isEqual:
和-isEqualTo<Class>:
方法,约定是允许使用nil个参数,-isEqual:
并为nil个参数引发异常。-isEqualTo<Class>:
扩展@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的性能优势基本上可以忽略不计。但是作者提到了另外两个区别:
nil
被处理