Sia i seguenti confronti restituiscono true:confronto NSString intesa
1)
@"foo" == @"foo";
2)
NSString *myString1 = @"foo";
NSString *myString2 = @"foo";
myString1 == myString2;
Tuttavia, ci sono sicuramente momenti in cui due NSString
s non può essere paragonata con l'operatore di uguaglianza e invece è richiesto [myString1 isEqualToString:myString2]
. Qualcuno può fare luce su questo?
La maggior parte dei compilatori renderà anche 'myString3' un puntatore alla costante' "foo" 'come ottimizzazione, quindi, in generale, tutte e tre queste variabili punteranno alla stessa posizione di memoria. Questo vale sia per gcc che per clang (con opzioni predefinite). Prova a compilare questo: http://gist.github.com/578568 – mipadi
e quindi come posso fare una variabile NSString comportarsi esattamente come @ "..."? la ragione per cui chiedo è b/c nel mio codice in questo momento la costante @ ".." funziona ma si blocca non appena la sostituisco con una variabile NSString .. vedi [qui] (http://stackoverflow.com/questions/14462951/ios-sqlite3-statement-coalesce-causare-memory-problems) – abbood
+1, Solo per aggiungere: 'isEqual:' fa infatti un confronto tra stringhe complete e restituisce lo stesso risultato di 'isEqualToString' perché il _NSObject Protocol Reference_ e _NSString Class Reference_ specificano esplicitamente (rispettivamente): "Se due oggetti sono uguali (per' -isEqual: ') devono avere lo stesso valore di hash" AND "Se due oggetti stringa sono uguali (come determinato dal metodo isEqualToString:) , devono avere lo stesso valore hash. " – Ephemera