es necesario definir el "cambio", también :)
Básicamente, cuando se crea un NSString, que está creando una matriz de caracteres y que está diciendo al compilador que el contenido de dicha matriz nunca cambiará La parte "nunca cambiar" es la parte "inmutable"; los datos que contiene la cadena no pueden ser modificados.
Por otro lado, un NSMutableString le permite realmente cambiar los datos a los que apunta (de ahí que sea 'mutable'). Tenga en cuenta el método 'appendString' que existe para NSMutableString; esto realmente toma datos y los golpea al final de la cadena.
Por ejemplo, si usted tenía:
NSString * miCadena = @ "gato"; myString = @ "Goldfish";
Eso funcionaría bien. En realidad, nunca está cambiando los datos que myString contiene; simplemente le está diciendo que quiere que apunte a un nuevo segmento de datos inalterables.
La única ocasión en la que tendría problemas con las diferencias entre objetos intercambiables e inmutables es si intentó modificar myString directamente (por ejemplo, agregar "s son geniales" a él o algo así).
En otras palabras, cualquier clase le permitiría "cambiar" cualquier cadena en cualquier otra cadena, pero los métodos que utilizó para hacerlo serían muy diferentes. Por ejemplo, para convertir "cat" en "CAT" con una cadena mutable, podría iterar sobre cada carácter y simplemente hacer que sea mayúscula (ya que puede modificar el contenido de una cadena mutable). Con una cadena inmutable, por otro lado, primero tendría que copiar la cadena original en otro lugar, modificarla y luego redirigir su variable para apuntar a este nuevo NSString.
Los siguientes enlaces pueden ser útiles: http://www.kirupa.com/forum/showthread.php?t=307928 http://forums.macrumors.com/showthread.php?t=467099
También recomiendo hacer algunas google; esta es una pregunta que se relaciona con el desarrollo en general, y es un concepto relativamente importante de entender. También se ha discutido hasta la muerte en otro lugar en Internet.
¡Casi una pregunta clintoniana! –