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:
?
isEqual:
compare une chaîne à un objet et renverra 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 documentation :
Considérations spéciales
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 vérifications spécifiques de l'égalité. Par exemple; isEqualToArray:
vérifie que les tableaux contiennent un nombre égal d'objets et que les objets d'un index donné renvoient YES
pour le isEqual:
test.
Aussi, pour écrire votre propre -isEqual:
et -isEqualTo<Class>:
méthodes, la convention consiste à autoriser des arguments nuls pour -isEqual:
et lève une exception pour les arguments nuls à -isEqualTo<Class>:
Mon devinez est qu'il fournit une légère amélioration des performances, comme isEqualToString: n'aura pas à vérifier par type ce qui est passé.
En développant les réponses @Abizern et @Jonathan Dann, isEqual
et isEqualToString
fonctionnent avec les valeurs 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");
}
Je recommande fortement this . Les avantages de performance d'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ée