我是面向对象编程的新手,一个需要我花一段时间才能掌握的概念是不变性。我认为昨晚灯泡熄灭了,但我想验证一下:
当我遇到无法更改不可变对象的声明时,我会感到困惑,因为例如,我可以执行以下操作:
NSString *myName = @"Bob";
myName = @"Mike";
在那里,我刚刚更改了不可变类型NSString的myName。我的问题是,“对象”一词可以指代内存中的物理对象,也可以指代“ myName”。前一个定义适用于不变性的概念。
对于变量,(对我而言)对不变性的更清楚的定义是,不变对象的值只能通过更改其在内存中的位置(即其引用(也称为指针))来更改。
这是正确的,还是我仍然迷失在树林中?
NSString
,而是“ 和的指针NSString
”,它不是一成不变的。我什么都不知道目标的C,但我在你的例子猜测@"Mike"
是创造的一个新实例NSString
,并将其分配给指针,myName
。因此,您没有更改myName
所指向的对象,仅更改了它所指向的对象。