Questo produce un oggetto stringa immutabile:Cacao: test per scoprire se una NSString è immutabile o mutabile?
NSString* myStringA = @"A"; //CORRECTED FROM: NSMutableString* myStringA = @"A";
Questo produce un oggetto stringa mutabile:
NSMutableString* myStringB = [NSMutableString stringWithString:@"B"];
Ma entrambi gli oggetti sono riportati come lo stesso tipo di oggetto, "NSCFString":
NSLog(@"myStringA is type: %@, myStringB is type: %@",
[myStringA class], [myStringB class]);
Quindi cosa distingue questi oggetti internamente e come faccio a verificarli, in modo da poter determinare facilmente se una variabile di stringa misteriosa è immutata abile o mutevole prima di fare qualcosa di malvagio?
Il codice di Philippe sotto di - if ([myStringB isKindOfClass: [NSMutableString class]]) - risolve il problema pratico. – StringSection
Sono ancora curioso di sapere come la differenza tra una stringa immutabile e mutabile sia rappresentata internamente e se ciò possa essere rilevato direttamente (il "tipo di oggetto" reale stampato con NSLog). – StringSection
Correzione: mi sono sbagliato, il codice - if ([myStringB isKindOfClass: [NSMutableString class]]) - non funziona dopotutto. Restituisce vero se la stringa è NSString o NSMutableString. Come indica Philippe di seguito (nella sua risposta modificata con codice diverso) apparentemente non esiste un modo documentato per rilevare oggetti mutabili e immutabili in generale in fase di esecuzione. – StringSection