创建NSString的两种方式
到如今的Xcode版本, 根据debug也能容易看出, 第三行创建NSString
的方式已经被简化成@""
了, 创建出的NSString
其类型为__NSCFConstantString
. 而NSString
的类方法stringWithFormat
创建出的字符串是另一种类型NSTaggedPointerString
那么这两种的创建字符串方式到底有何区别呢?
在继续之前,我了解了下什么是TaggedPointer. 看唐巧博客
哦, 原来这种TaggedPoint只是假象,那里面的是什么类型呢?
继续把字符串增大看看
hehe, 原来是__NSCFString
, 这些都是NSString
的子类, 细细看我发现, 此时str4和str5的内存地址又不同了, 但是在第一张图中是相同的, 我想这是不是可以归结于苹果做了某种优化呢?
str1,2,3的地址都是相同的, 从名称和地址上来看都是存储在常量区的, 都是不可变字符(但是为什么在debug时NSMutableString, 我不太理解)
str4,5是在运行时期动态分配存储空间的, 都是在堆上, 所以地址不相同.
对于这两者之间的相互转化:
copy
可以将任意一种字符串变成__NSCFConstantString
类型
mutableCopy
可以将任意一种字符串变成__NSCFString
类型