NSString是一個Unicode編碼,16位字符的字符序列
NSString被定義為類,是一個引用類型,拷貝時就是拷貝指針
使用字符串的第一步,是初始化
三種初始化方式:
字面常量
NSString *str1=@"Hello World!";
內(nèi)存分配,再搭配初始化器,編碼方式
NSString *str2=[[NSString alloc]initWithCString:"Hello World!" encoding:NSUTF8StringEncoding];
工廠方法,是一個類方法,類方法內(nèi)部返回一個新的對象
NSString *str3=[NSString stringWithCString:"Hello World!" encoding:NSUTF8StringEncoding];
NSString具有恒定性,所有操作無法更改字符串本身,如有更改,都是返回新值的形式
使用字面常量初始化方式,NSString具有共享機制
NSMutableString具有可變性,NSString具有恒定性
NSMutableString不具有共享機制,NSString具有共享機制
NSMutableString不是在原有內(nèi)存上直接增長,而是重新分配一個更大或更小的緩存容量存放字符
字符串初始化后,會分配一個緩存容量capacity,其長度一般大于實際的字符串?dāng)?shù)量,當(dāng)然也可以自己給它一個緩存容量
當(dāng)字符串增長時,如果實際需求大于capacity,其capacity會以兩倍的方式指數(shù)增長,代價是:分配新的堆內(nèi)存2*capacity,將原來堆內(nèi)存的內(nèi)容拷貝到新內(nèi)存,再釋放原來堆內(nèi)存
最佳實踐:估計好capacity,預(yù)先分配好一定容量,避免以后capacity的增長