Je suis nouveau dans la programmation orientée objet, et un concept qui m'a pris un certain temps à saisir est l'immuabilité. Je pense que l'ampoule s'est éteinte hier soir mais je veux vérifier:
Lorsque je rencontre des déclarations selon lesquelles un objet immuable ne peut pas être modifié, je suis perplexe car je peux, par exemple, faire ce qui suit:
NSString *myName = @"Bob";
myName = @"Mike";
Là, je viens de changer myName, de type immuable NSString. Mon problème est que le mot «objet» peut faire référence à l'objet physique en mémoire ou à l'abstraction «monNom». L'ancienne définition s'applique au concept d'immuabilité.
Quant à la variable, une définition plus claire (pour moi) de l'immuabilité est que le valeur d'un objet immuable ne peut être modifiée qu'en changeant également son emplacement dans la mémoire, c'est-à-dire sa référence (également connue sous le nom de pointeur).
Est-ce correct ou suis-je toujours perdu dans les bois?
NSString
, c'est un " pointeur vers etNSString
", qui n'est pas immuable. Je ne sais rien de C objectif, mais je devine dans votre exemple qui@"Mike"
crée une nouvelle instance deNSString
et en lui attribuant au pointeur ,myName
. Vous n'avez donc pas changé l'objet quimyName
pointait, juste ce qu'il pointait.