Відповіді:
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оброблений