1.关于NSMutableString的一个疑问. 为何NSMutableString字符串拼接超过34字符串.字符串地址会发生变化.这是字符串的内存布局图.接下来是我的一些猜想和实验.
字符串内存布局
查看内存
打开内存查看0x00006000033cb780这个地址发现char*的字符串首地址是一个字符串长度用1个字节来存储剩下的存储字符串
在c语言中字符串是以/0结束. 除去一个/0结尾字符串 加上一个首地址1字节存储的字符串长度. 实际开辟的内存空间只能存储36 -2 = 34个字符.也就是1e. 这时候如果在拼接一个字符串话.会覆盖其他数据.
这时候NSMutableString 会开辟一块新的内存空间把0x00006000033cb780地址的内存空间的数据拷贝到新的内地空间中去.然后释放旧的内存空间.
新字符串空间
旧字符串空间
打印旧字符串地址发现.字符串地址的长度和开始q打头的字符串已经没了. 怀疑系统已经标记了这块内存.到时统一释放.