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