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 NO
si 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 YES
pour 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 isEqual
et isEqualToString
travailler avec des nil
valeurs.
- (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:
nil
est géré