Я новичок в объектно-ориентированном программировании, и одна концепция, на которую у меня ушло некоторое время, - это неизменность. Я думаю, что лампочка погасла прошлой ночью, но я хочу проверить:
Когда я сталкиваюсь с утверждениями, что неизменяемый объект не может быть изменен, я озадачен, потому что я могу, например, сделать следующее:
NSString *myName = @"Bob";
myName = @"Mike";
Там я только что изменил myName неизменяемого типа NSString. Моя проблема в том, что слово «объект» может относиться к физическому объекту в памяти или абстракции «myName». Первое определение относится к понятию неизменности.
Что касается переменной, то более ясное (для меня) определение неизменяемости состоит в том, что значение неизменяемого объекта можно изменить только путем изменения его местоположения в памяти, то есть его ссылки (также называемой указателем).
Это правильно, или я все еще заблудился в лесу?
NSString
является " указателем на" иNSString
не является неизменным. Я ничего не знаю об объективном C, но я предполагаю , что в вашем примере , что@"Mike"
создает новый экземплярNSString
и присваивает его указатель ,myName
. Таким образом, вы не изменили объект, на которыйmyName
указывал, только то, на что он указывал.