Sono nuovo nella programmazione orientata agli oggetti e un concetto che mi sta prendendo da tempo per capire è l'immutabilità. Penso che la lampadina si sia spenta ieri sera, ma voglio verificare:
Quando trovo delle affermazioni secondo cui un oggetto immutabile non può essere modificato, sono perplesso perché, ad esempio, posso fare quanto segue:
NSString *myName = @"Bob";
myName = @"Mike";
Lì, ho appena cambiato myName, di tipo immutabile NSString. Il mio problema è che la parola "oggetto" può riferirsi all'oggetto fisico in memoria, o all'astrazione, "mioNome". La prima definizione si applica al concetto di immutabilità.
Per quanto riguarda la variabile, una definizione più chiara (per me) di immutabilità è che il valore di un oggetto immutabile può essere modificato solo cambiando anche la sua posizione in memoria, cioè il suo riferimento (noto anche come puntatore).
È corretto o mi sono ancora perso nei boschi?
NSString
, è un " puntatore a eNSString
", che non è immutabile. Non so nulla di obiettivo C, ma credo nel tuo esempio, che@"Mike"
sta creando una nuova istanzaNSString
e assegnandola al puntatore ,myName
. Quindi non hai cambiato l'oggetto a cuimyName
puntava, proprio quello a cui puntava.