今天我的一个学生问我这两个概念之间的技术差异
因为我们知道常量是不可变的并且变量是可变的。 我告诉他,Mutable / Non Mutable是Cocoa Framework的概念,而Constants / Variable则不是。但我不确定我是对的
我知道它的用法,但没有找到任何适当的技术答案。
答案 0 :(得分:0)
你是正确的常量是不可变的,变量是可变的。
cocoa框架中的mutable和non-mutable通常与数据结构(如数组,队列,字典等)相关联。
where mutable意味着我们可以改变数据结构(添加/删除对象)和不可变的意味着我们无法修改它(只是读取)。
希望这有帮助
答案 1 :(得分:0)
Objective-C中的Constness引用对象引用,但从不引用对象(例如,在C ++中)。可变性是指对象。
// non-const reference to immutable string object
NSString *s = …;
// You can change the reference, …
s = …; // No error
// … but not the string object
[s appendString:…]; // Error
// const reference to immutable string object
const NSString* s = …;
// You can neither change the reference, …
s = …; // Error
// … nor the string object
[s appendString:…]; // Error
// non-const reference to mutable string object
NSMutableString *s = …;
// You can change the reference …
s = …; // No Error
// … and the string object
[s appendString:…]; // No error
// const reference to mutable string object
const NSMutableString *s = …;
// You cannot change the reference, …
s = …; // Error
// … but the string object
[s appendString:…];
所以你可以说不变性是“(OOP)对象的常量”。
然而,“变量”的常量(更准确地说:没有Objective-C对象的C对象)对于编译器来说非常重要,因为它是SSA。不可变性对于设计中的许多事情都很重要。
即使对于(Objective-C)对象,不可变性也很重要,并且不像通常那样经常被考虑。特别是对于传递的“数据类”,应该考虑使用不可变版本使事情变得更容易。这也适用于您自己的课程。