1.当我们使用简要的创建字符串对象的时候,NSString *str = @“jack”,这个字符串对象是存储在常量区的.
当我们调用NSString的类方法来创建对象的时候
NSString *str = [NSString stringWithFormat:@“jack”] 或者 NSString *str =[NSString new];
创建的字符串对象是存储在堆区的.
2.当在内存中创建一个字符串对象以后,这个字符串对象的内容就无法更改.
当我们重新为字符串指针初始化值的时候,并不是修改原来的字符串对象,而是重新的创建一个字符串对象,将这个字符串对象的地址重新赋值给这个指针变量.
3.当系统准备要在内存中创建字符串对象的时候,会先检查内存中是否有相同内容的字符串对象,如果有,直接指向,如果没有才会重新创建.
ps:使用简要的创建字符串对象的时候会在内存的常量区中搜索,调用NSString的类方法来创建对象的时候会在内存的堆区中搜索.
4.存储在常量区的数据是不会被回收的,所以存储在常量区的字符串对象也不会被回收.
NSMutableString
我们已经知道字符串的恒定性了,一旦创建一个字符串对象,那么这个字符串对象的内容就无法更改,当我们修改字符串的时候,其实是重新的创建了一个字符串对象.
那么问题来了?如何让这样大批量的字符串拼接可以更加快速一点?
NSMutableString 就产生了,NSMutableString继承NSString,也是用来存储字符串数据的,它是在父类NSString的基础之上做的扩展,存储在NSMutableString对象中的字符串数据是可以修改的,具有可变性,它不是重新的创建了一个字符串对象.
为什么这么快?因为NSMutableString只有一个,每次修改的时候,直接修改的是这个对象中的数据.
使用建议:做大批量字符串拼接的时候使用NSMutableString,平常的时候还是使用NSString.
原则上都是为了提升代码效率,使用NSString的时候,如果内存中存在这个字符串是直接取出来的,所以取值高效.使用NSMutableString的时候,操作的就是同一个字符串,所以拼接高效.