Comparació de NSStrings
Continuant un tema a la secció del curs de cocoa (part 3)...
En una prova per equivocació vaig comparar dos strings amb "==" i va funcionar correctament!
D'aquesta manera, en el curs es fa una comparació d'aquesta manera
if([keyPath isEqualToString:@"center"]){ NSLog(@"canvi del centre");}
else if([keyPath isEqualToString:@"color"]){ NSLog(@"canvi del color");}
else if([keyPath isEqualToString:@"radius"]){ NSLog(@"canvi del radius");};i la he pogut escriure d'aquesta manera:
if(keyPath == @"center"){ NSLog(@"canvi del centre");}
else if(keyPath == @"color"){ NSLog(@"canvi del color");}
else if(keyPath == @"radius"){ NSLog(@"canvi del radius");};i ja que funcionava, he intentat utilizar un switch, però em dona error dient que el switch requereix un integer.
No es gaire, però potser l'interessa a algú 
20 juny 2008 12:39
Sí, el switch té aquesta limitació: enters o caràcters. 
Però això de comparació dels strings amb el == no ho sabia. Potser també funciona amb altres objectes, i a l'Objective-C 2.0 hi han afegit la sobre-càrrega d'operadors. La veritat és que en temes matemàtics els utilitzava molt amb C++. Sobretot per càlculs matricials.
Gràcies per la informació. No se m'hagés acudit mai provar-ho.
21 juny 2008 00:14
Bé, acabo de fer un cop d'ull pel Google i no hi he trobat cap referència. Ni tant sols la comparació de NSString amb "==" Potser ho tenen amagat. 
21 juny 2008 00:24
El compilador d'Objective-C que utilitzem realitza una optimització amb tots els NSString: si el contingut de dos o més cadenes creades amb l'operador @ és idèntic, aquestes s'emmagatzemen en un mateix lloc.
Per tant, la proposta d'utilitzar == funciona només perquè els NSString amb què treballes han estat creats amb @ en el teu codi. En altres paraules, estàs comparant dos punters amb una mateixa adreça de memòria.
Ara bé, no és gaire recomanable utilitzar aquesta tècnica perquè:
- No tots els comiladors d'Objective-C apliquen aquesta optimització
- No sempre treballaràs amb cadenes creades dins del teu codi amb l'operador @
Si voleu més informació sobre el tema, doneu un cop d'ull a http://www.cocoadev.com/index.pl?NSString. Espero haver estat útil, salut!
29 juny 2008 13:37
Ei, gràcies per aclarir-nos això. Ja em pensava que era una nova característica de l'Objective-C 2.0 . No hi havia pensat en el tema de la comparació de l'adreça del propi punter. Això em passa per programar amb Python. 
29 juny 2008 14:11
Gracies, ho tindré en compte!
01 juliol 2008 11:35
