A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

从名字上来看,不应该是前者不可变,也就是不能在添加字符串吗,但是还是有这样的用法:
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"];


那这样的话,二者一个可变,一个不可变,岂不是不成立了。

8 个回复

倒序浏览
是不可变的,s2的值仍然没有变,s3是s2的串加上11 12,s3是刚创建好的,创建好的串是不可变的,你又没有用方法改变S2或者S3的值
回复 使用道具 举报
头像其实是@
回复 使用道具 举报
这两个区别是,NSString 是不可变,字符串拼接返回的是新的字符串,而不是去改变原来的字符串,而nsmutalestring则是直接改变原来的字符串
回复 使用道具 举报
本帖最后由 仰望的繁华 于 2015-4-16 12:48 编辑

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

即:NSString *s1
NSMutableString *s2

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

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

回复 使用道具 举报
都可以添加的,NSString是不可变的,它的添加字符串是新生成一个字符串的;NSMutableString是改变的自身
回复 使用道具 举报
no no no ~~
回复 使用道具 举报
s2字符串未发生改变,s3在内存中重新生成了一个字符串,是s2+@"11 12"的心串,s1字符串直接发生了改变
回复 使用道具 举报
wzboy 中级黑马 2015-4-16 14:01:52
9#
5楼已经说的很明白了,可不可变在于,mutable可以没有返回值,而NSString不行。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马