В чем разница между isEqual:
и isEqualToString:
?
Почему классы добавляют методы isEqualTo * (isEqualToArray для NSArray, isEqualToData для NSData,...) вместо того, чтобы просто переопределять isEqual:
?
В чем разница между isEqual:
и isEqualToString:
?
Почему классы добавляют методы isEqualTo * (isEqualToArray для NSArray, isEqualToData для NSData,...) вместо того, чтобы просто переопределять isEqual:
?
isEqual:
сравнивает строку с объектом и возвращает NO
, если объект не является строкой. isEqualToString:
быстрее, если вы знаете, что оба объекта являются строками, а documentation:
Особые соображения
Когда вы знаете, что оба объекта являются строками, этот метод является более быстрым способом проверки равенства, чем
isEqual:
.
isEqualTo<Class>
используется для обеспечения конкретных проверок равенства. Например; isEqualToArray:
проверяет, что массивы содержат равное количество объектов и что объекты в данном индексе возвращают YES
для isEqual:
тест.
Кроме того, для написания собственных методов -isEqual:
и -isEqualTo<Class>:
соглашение должно допускать аргументы nil для -isEqual:
и создавать исключение для аргументов nil для -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 в большинстве случаев незначительны. Но есть два других различия, которые упоминает автор:
nil
обрабатывается