use*_*268 13 iphone objective-c
什么是可变和不可变的差异
喜欢
NSString和NSMutableString.
NSArray和NSMutableArray.
NSDictionary和NSMutableDictionary.
可变对象和另一个对象[我猜不可变]有什么区别?
@提前致谢.
Ben*_*ayo 17
可变对象可以变异或改变.不可变对象不能.例如,虽然您可以在NSMutableArray中添加或删除对象,但您无法使用NSArray.
可变对象可以更改,添加或删除元素,这是使用不可变对象无法实现的.不可变对象会被你在[[object alloc] initWith...]初始化器中给出的任何输入所困住.
你的可变对象的优点是显而易见的,但它们只应在必要时使用(这比你想象的要少得多),因为它们占用的内存比不可变对象多.
可以修改可变对象,不可变对象不能.
例如: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更难,代码更多)
基本区别是:
NSStrings无法编辑,只能重新分配.这意味着当NSString的值发生更改时,它实际上指向内存中的新位置.
可以编辑NSMutableString对象并保持相同的指针.
一个常见的实际区别是:
如果您创建了1个NSString,然后为其分配另一个NSString,则编辑其中任何一个,它们现在将指向不同的字符串.
如果你使用NSMutableStrings做同样的事情,但只编辑其中一个(不重新分配),它们都将指向新编辑的对象.
| 归档时间: |
|
| 查看次数: |
13849 次 |
| 最近记录: |