美文网首页
NSString的恒定性

NSString的恒定性

作者: Sherlock_Jim | 来源:发表于2020-04-23 14:15 被阅读0次

1.当我们使用简要的创建字符串对象的时候,NSString *str = @“jack”,这个字符串对象是存储在常量区的.

当我们调用NSString的类方法来创建对象的时候

NSString *str = [NSString stringWithFormat:@“jack”] 或者 NSString *str =[NSString new];

创建的字符串对象是存储在堆区的.

两个地址差距很大说明不是在同一个区

2.当在内存中创建一个字符串对象以后,这个字符串对象的内容就无法更改.

当我们重新为字符串指针初始化值的时候,并不是修改原来的字符串对象,而是重新的创建一个字符串对象,将这个字符串对象的地址重新赋值给这个指针变量.

是地址发生了改变 说明是重新创建了字符串对象重新赋值

3.当系统准备要在内存中创建字符串对象的时候,会先检查内存中是否有相同内容的字符串对象,如果有,直接指向,如果没有才会重新创建.

ps:使用简要的创建字符串对象的时候会在内存的常量区中搜索,调用NSString的类方法来创建对象的时候会在内存的堆区中搜索.

str1的值和str2的值是一样的 说明没有重新创建字符串 并且是常量区的地址 str0的值和str1的值是一样的 说明没有重新创建字符串 并且是堆区的地址

4.存储在常量区的数据是不会被回收的,所以存储在常量区的字符串对象也不会被回收.

NSMutableString

我们已经知道字符串的恒定性了,一旦创建一个字符串对象,那么这个字符串对象的内容就无法更改,当我们修改字符串的时候,其实是重新的创建了一个字符串对象.

耗时12秒 说明每次循环都是创建新的字符串

那么问题来了?如何让这样大批量的字符串拼接可以更加快速一点?

NSMutableString 就产生了,NSMutableString继承NSString,也是用来存储字符串数据的,它是在父类NSString的基础之上做的扩展,存储在NSMutableString对象中的字符串数据是可以修改的,具有可变性,它不是重新的创建了一个字符串对象.

10万个循环也才0.36秒钟的时间,因为操作的都是同一个字段

为什么这么快?因为NSMutableString只有一个,每次修改的时候,直接修改的是这个对象中的数据.

使用建议:做大批量字符串拼接的时候使用NSMutableString,平常的时候还是使用NSString.

原则上都是为了提升代码效率,使用NSString的时候,如果内存中存在这个字符串是直接取出来的,所以取值高效.使用NSMutableString的时候,操作的就是同一个字符串,所以拼接高效.

相关文章

网友评论

      本文标题:NSString的恒定性

      本文链接:https://www.haomeiwen.com/subject/zrxaihtx.html