黑马程序员技术交流社区

标题: NSString 和NSMutableString 的区别,都可以添加字符串啊??? [打印本页]

作者: 马丁    时间: 2015-4-16 12:11
标题: NSString 和NSMutableString 的区别,都可以添加字符串啊???
从名字上来看,不应该是前者不可变,也就是不能在添加字符串吗,但是还是有这样的用法:
NSString *s2 = [NSString stringWithFormat:@"age is 10"];
    NSString *s3 = [s2 stringByAppendingString:@" 11 12"];

而NSMutableString 也有这样的用法:
NSMutableString *s1 = [NSMutableString stringWithFormat:@"my age is 10"];
    // 拼接内容到s1的后面
    [s1 appendString:@" 11 12"];


那这样的话,二者一个可变,一个不可变,岂不是不成立了。
作者: 丶小千    时间: 2015-4-16 12:24
是不可变的,s2的值仍然没有变,s3是s2的串加上11 12,s3是刚创建好的,创建好的串是不可变的,你又没有用方法改变S2或者S3的值
作者: 马丁    时间: 2015-4-16 12:26
头像其实是@
作者: Answer_QJ2Fq    时间: 2015-4-16 12:28
这两个区别是,NSString 是不可变,字符串拼接返回的是新的字符串,而不是去改变原来的字符串,而nsmutalestring则是直接改变原来的字符串
作者: 仰望的繁华    时间: 2015-4-16 12:45
本帖最后由 仰望的繁华 于 2015-4-16 12:48 编辑

不可变的那个,添加字符串是:拼出一个新的字符串重新赋值于它。
可变的那个,添加字符串是:直接在它后面加上。

即:NSString *s1
NSMutableString *s2

s1  可以通过改变地址指向新的字符串 来实现 s1的变化。
而s2 可以直接对其 指向的地址的内容进行修改。

也就是说:可变不可变,指的是 赋值 的 “值” 本身 是否可变,而不是指操作OC对象的指针 是否可变。


作者: 无声风铃    时间: 2015-4-16 13:12
都可以添加的,NSString是不可变的,它的添加字符串是新生成一个字符串的;NSMutableString是改变的自身
作者: shane_west    时间: 2015-4-16 13:26
no no no ~~
作者: lvzhehappy    时间: 2015-4-16 14:01
s2字符串未发生改变,s3在内存中重新生成了一个字符串,是s2+@"11 12"的心串,s1字符串直接发生了改变
作者: wzboy    时间: 2015-4-16 14:01
5楼已经说的很明白了,可不可变在于,mutable可以没有返回值,而NSString不行。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2