Я новачок в об’єктно-орієнтованому програмуванні, і одна концепція, яка займає мене час, - це незмінність. Я думаю, що лампочка згасла минулої ночі, але я хочу перевірити:
Коли я стикаюся з твердженнями, що незмінний об'єкт неможливо змінити, я здивований, бо можу, наприклад, зробити наступне:
NSString *myName = @"Bob";
myName = @"Mike";
Там я щойно змінив своє ім'я, непорушного типу NSString. Моя проблема полягає в тому, що слово "об'єкт" може позначати фізичний об'єкт в пам'яті або абстракцію "myName". Перше визначення стосується поняття незмінності.
Що стосується змінної, то більш чітким (для мене) визначенням незмінності є те, що значення незмінного об'єкта можна змінити лише шляхом зміни його місця в пам'яті, тобто його посилання (також відомого як його покажчик).
Це правильно, чи я все-таки загубився в лісі?
NSString
, це " вказівник на таNSString
", який не змінюється. Я нічого не знаю про об'єктивне C, але я припускаю , що в вашому прикладі , що@"Mike"
створює новий екземплярNSString
і привласнює його покажчик ,myName
. Отже, ви не змінили об'єкт, на якийmyName
вказували, а лише на те, на що він вказував.