Les deux comparaisons suivantes évaluent true:comparaison Comprendre NSString
1)
@"foo" == @"foo";
2)
NSString *myString1 = @"foo";
NSString *myString2 = @"foo";
myString1 == myString2;
Cependant, il y a certainement des moments où deux NSString
s ne peuvent pas être comparés à l'aide l'opérateur d'égalité et [myString1 isEqualToString:myString2]
est requis à la place. Quelqu'un peut-il nous éclairer à ce sujet?
La plupart des compilateurs font également de myString3 un pointeur vers la constante '" foo "' en guise d'optimisation, donc généralement, ces trois variables pointent vers le même emplacement mémoire. Cela est vrai pour gcc et clang (avec les options par défaut). Essayez de compiler ceci: http://gist.github.com/578568 – mipadi
et comment puis-je faire une variable NSString se comporter exactement comme @ "..."? la raison pour laquelle je demande est b/c dans mon code maintenant la constante @ ".." fonctionne mais elle se bloque dès que je la remplace par une variable NSString .. voir [ici] (http://stackoverflow.com/questions/14462951/ios-sqlite3-instruction-coalesce-causant-des-problèmes) – abbood
+1, Juste pour ajouter: 'isEqual:' fait en fait une comparaison de chaîne complète et retourne le même résultat que 'isEqualToString' parce que le protocole _NSObject Reference_ et _NSString Class Reference_ explicitement (respectivement): "Si deux objets sont égaux (par' -isEqual: ') ils doivent avoir la même valeur de hachage" AND "Si deux objets chaîne sont égaux (comme déterminé par la méthode isEqualToString:) , ils doivent avoir la même valeur de hachage. " – Ephemera