Eu sou novo na programação orientada a objetos, e um conceito que me levou um tempo para entender é a imutabilidade. Acho que a lâmpada se apagou ontem à noite, mas quero verificar:
Quando me deparo com afirmações de que um objeto imutável não pode ser alterado, fico perplexo porque posso, por exemplo, fazer o seguinte:
NSString *myName = @"Bob";
myName = @"Mike";
Lá, eu mudei myName, do tipo imutável NSString. Meu problema é que a palavra "objeto" pode se referir ao objeto físico na memória ou à abstração "meu nome". A definição anterior se aplica ao conceito de imutabilidade.
Quanto à variável, uma definição mais clara (para mim) de imutabilidade é que o valor de um objeto imutável só pode ser alterado mudando também sua localização na memória, ou seja, sua referência (também conhecida como ponteiro).
Isso está correto ou ainda estou perdido na floresta?
NSString
, é um " ponteiro para eNSString
", o que não é imutável. Eu não sei nada de C objetivo, mas eu estou supondo que no seu exemplo que@"Mike"
é a criação de uma nova instânciaNSString
e atribuindo-o para o ponteiro ,myName
. Portanto, você não alterou o objeto quemyName
estava apontando, apenas para o que estava apontando.