Quelle est la différence entre isEqual:et isEqualToString:?
Pourquoi les classes ajoutent-elles des méthodes isEqualTo * (isEqualToArray pour NSArray, isEqualToData pour NSData, ...) au lieu de simplement remplacer isEqual:?
Quelle est la différence entre isEqual:et isEqualToString:?
Pourquoi les classes ajoutent-elles des méthodes isEqualTo * (isEqualToArray pour NSArray, isEqualToData pour NSData, ...) au lieu de simplement remplacer isEqual:?
Réponses:
isEqual:compare une chaîne à un objet et retournera NOsi l'objet n'est pas une chaîne. isEqualToString:est plus rapide si vous savez que les deux objets sont des chaînes, comme l' indique la documentation :
Considérations particulières
Lorsque vous savez que les deux objets sont des chaînes, cette méthode est un moyen plus rapide de vérifier l'égalité que
isEqual:.
isEqualTo<Class>est utilisé pour fournir des contrôles spécifiques d'égalité. Par exemple; isEqualToArray:vérifie que les tableaux contiennent un nombre égal d'objets et que les objets à un index donné retournent YESpour le isEqual:test.
Aussi, pour écrire vos propres méthodes -isEqual:et -isEqualTo<Class>:, la convention est d'autoriser nil arguments pour -isEqual:et de lever une exception pour les arguments nil à-isEqualTo<Class>:
Développer les réponses @Abizern et @Jonathan Dann, les deux isEqualet isEqualToStringtravailler avec des nilvaleurs.
- (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");
}
Je recommande fortement ce . Les avantages de performance de isEqualToString sont fondamentalement négligeables pour la plupart des applications. Mais il y a deux autres distinctions que l'auteur mentionne:
nilest géré