可变和不可变之间有什么区别

use*_*268 13 iphone objective-c

什么是可变和不可变的差异

喜欢

NSString和NSMutableString.

NSArray和NSMutableArray.

NSDictionary和NSMutableDictionary.

可变对象和另一个对象[我猜不可变]有什么区别?

@提前致谢.

Ben*_*ayo 17

可变对象可以变异或改变.不可变对象不能.例如,虽然您可以在NSMutableArray中添加或删除对象,但您无法使用NSArray.

可变对象可以更改,添加或删除元素,这是使用不可变对象无法实现的.不可变对象会被你在[[object alloc] initWith...]初始化器中给出的任何输入所困住.

你的可变对象的优点是显而易见的,但它们只应在必要时使用(这比你想象的要少得多),因为它们占用的内存比不可变对象多.


Jon*_*an. 8

可以修改可变对象,不可变对象不能.

例如:NSMutableArray有addObject: removeObject:方法(和更多),但NSArray没有.

修改字符串:

NSString *myString = @"hello";
myString = [myString stringByAppendingString:@" world"];
Run Code Online (Sandbox Code Playgroud)

VS

NSMutableString *myString = @"hello";
[myString appendString:@" world"];
Run Code Online (Sandbox Code Playgroud)

在处理数组时,可变对象特别有用,

例如,如果您有NSMrray的NSMutableStrings,您可以:

[myArray makeObjectsPerformSelector:@selector(appendString:) withObject:@"!!!"];
Run Code Online (Sandbox Code Playgroud)

这将增加3!到数组中每个字符串的末尾.

但是如果你有NSStrings的NSArray(因此是不可变的),你不能这样做(至少它比使用NSMutableString更难,代码更多)


Pan*_*waj 7

基本区别是:

  • NSStrings无法编辑,只能重新分配.这意味着当NSString的值发生更改时,它实际上指向内存中的新位置.

  • 可以编辑NSMutableString对象并保持相同的指针.

一个常见的实际区别是:

  • 如果您创建了1个NSString,然后为其分配另一个NSString,则编辑其中任何一个,它们现在将指向不同的字符串.

  • 如果你使用NSMutableStrings做同样的事情,但只编辑其中一个(不重新分配),它们都将指向新编辑的对象.


glo*_*ker 5

可变对象可以变异或改变.不可变对象不能.例如,虽然您可以在NSMutableArray中添加或删除对象,但您无法使用NSArray.