对NSString的创建方式的分析

时间:2022-05-07 15:31:12

创建NSString的两种方式

对NSString的创建方式的分析

到如今的Xcode版本, 根据debug也能容易看出, 第三行创建NSString的方式已经被简化成@""了, 创建出的NSString其类型为__NSCFConstantString. 而NSString的类方法stringWithFormat创建出的字符串是另一种类型NSTaggedPointerString

那么这两种的创建字符串方式到底有何区别呢?


在继续之前,我了解了下什么是TaggedPointer. 看唐巧博客

哦, 原来这种TaggedPoint只是假象,那里面的是什么类型呢?

继续把字符串增大看看

对NSString的创建方式的分析

hehe, 原来是__NSCFString, 这些都是NSString的子类, 细细看我发现, 此时str4和str5的内存地址又不同了, 但是在第一张图中是相同的, 我想这是不是可以归结于苹果做了某种优化呢?

str1,2,3的地址都是相同的, 从名称和地址上来看都是存储在常量区的, 都是不可变字符(但是为什么在debug时NSMutableString, 我不太理解)

str4,5是在运行时期动态分配存储空间的, 都是在堆上, 所以地址不相同.


对于这两者之间的相互转化:

copy可以将任意一种字符串变成__NSCFConstantString类型

mutableCopy可以将任意一种字符串变成__NSCFString类型