常数/变量和非可变/可变

时间:2015-07-20 14:28:31

标签: objective-c swift

今天我的一个学生问我这两个概念之间的技术差异

  1. 常数和变量
  2. 不可变和可变
  3. 因为我们知道常量是不可变的并且变量是可变的。 我告诉他,Mutable / Non Mutable是Cocoa Framework的概念,而Constants / Variable则不是。但我不确定我是对的

    我知道它的用法,但没有找到任何适当的技术答案。

2 个答案:

答案 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)对象,不可变性也很重要,并且不像通常那样经常被考虑。特别是对于传递的“数据类”,应该考虑使用不可变版本使事情变得更容易。这也适用于您自己的课程。