Soy nuevo en la programación orientada a objetos, y un concepto que me ha llevado un tiempo comprender es la inmutabilidad. Creo que la bombilla se apagó anoche pero quiero verificar:
Cuando me encuentro con afirmaciones de que un objeto inmutable no se puede cambiar, estoy perplejo porque, por ejemplo, puedo hacer lo siguiente:
NSString *myName = @"Bob";
myName = @"Mike";
Allí, acabo de cambiar myName, de tipo inmutable NSString. Mi problema es que la palabra "objeto" puede referirse al objeto físico en la memoria, o la abstracción, "myName". La primera definición se aplica al concepto de inmutabilidad.
En cuanto a la variable, una definición más clara (para mí) de inmutabilidad es que el valor de un objeto inmutable solo puede cambiarse cambiando también su ubicación en la memoria, es decir, su referencia (también conocida como su puntero).
¿Es correcto o todavía estoy perdido en el bosque?
NSString
, es un " puntero a yNSString
", que no es inmutable. No sé nada de objetivo C, pero supongo en su ejemplo que@"Mike"
es la creación de una nueva instancia deNSString
y asignarlo al puntero ,myName
. Por lo tanto, no ha cambiado el objeto al quemyName
apuntaba, solo a lo que apuntaba.