Esto produce un objeto de cadena inmutable:Cacao: ¿Pruebas para encontrar si un NSString es inmutable o mutable?
NSString* myStringA = @"A"; //CORRECTED FROM: NSMutableString* myStringA = @"A";
Esto produce un objeto de cadena mutable:
NSMutableString* myStringB = [NSMutableString stringWithString:@"B"];
Pero ambos objetos son reportados como el mismo tipo de objeto, "NSCFString":
NSLog(@"myStringA is type: %@, myStringB is type: %@",
[myStringA class], [myStringB class]);
Entonces, ¿qué es lo que distingue a estos objetos internamente, y cómo lo pruebo, para poder determinar fácilmente si una cadena de caracteres misteriosa es inmut capaz o mutable antes de hacer algo malvado?
El código de Philippe a continuación de - if ([myStringB isKindOfClass: [NSMutableString class]]) - trabaja y resuelve el problema práctico. – StringSection
Todavía tengo curiosidad sobre cómo se representa internamente la diferencia entre una cadena inmutable y mutable, y si eso se puede detectar directamente (el "tipo de objeto" real impreso con NSLog). – StringSection
Corrección: Estaba equivocado, el código - if ([myStringB isKindOfClass: [NSMutableString class]]) - no está funcionando después de todo. Devuelve verdadero si la cadena es NSString o NSMutableString. Como Philippe indica a continuación (en su respuesta ahora editada con código diferente) aparentemente no hay forma documentada de detectar objetos mutables vs inmutables en general en el tiempo de ejecución. – StringSection