NSString是一个Unicode编码,16位字符的字符序列
NSString被定义为类,是一个引用类型,拷贝时就是拷贝指针
使用字符串的第一步,是初始化
三种初始化方式:
字面常量
NSString *str1=@"Hello World!";
内存分配,再搭配初始化器,编码方式
NSString *str2=[[NSString alloc]initWithCString:"Hello World!" encoding:NSUTF8StringEncoding];
工厂方法,是一个类方法,类方法内部返回一个新的对象
NSString *str3=[NSString stringWithCString:"Hello World!" encoding:NSUTF8StringEncoding];
NSString具有恒定性,所有操作无法更改字符串本身,如有更改,都是返回新值的形式
使用字面常量初始化方式,NSString具有共享机制
NSMutableString具有可变性,NSString具有恒定性
NSMutableString不具有共享机制,NSString具有共享机制
NSMutableString不是在原有内存上直接增长,而是重新分配一个更大或更小的缓存容量存放字符
字符串初始化后,会分配一个缓存容量capacity,其长度一般大于实际的字符串数量,当然也可以自己给它一个缓存容量
当字符串增长时,如果实际需求大于capacity,其capacity会以两倍的方式指数增长,代价是:分配新的堆内存2*capacity,将原来堆内存的内容拷贝到新内存,再释放原来堆内存
最佳实践:估计好capacity,预先分配好一定容量,避免以后capacity的增长