04NSMutableString和NSString區(qū)別,及相互轉(zhuǎn)換方法

http://blog.csdn.net/a6472953/article/details/7943191
NSString是一個(gè)不可變的字符串對(duì)象。這不是表示這個(gè)對(duì)象聲明的變量的值不可變,而是表示它初始化以后,你不能改變?cè)撟兞克峙涞膬?nèi)存中的值,但你可以重新分配該變量所處的內(nèi)存空間。

而NSMutableString是可變的,意味著你可以追加它的內(nèi)存空間,或者修改它所分配的內(nèi)存空間中的值。

因?yàn)镹SMutableString和NSString的差別,所以他們之間的互相轉(zhuǎn)換使用使用合適的方法。 將NSMutableString轉(zhuǎn)換成NSString有下列幾種方法:

第一種,使用NSString stringWithString:方法

NSString *immutableString2 = [[yourMutableString copy] autorelease];    
    NSLog(@"immutableString2=%d,%d",immutableString2 ,yourMutableString);    

第二種,使用NSMutableString copy方法

NSString *immutableString2 = [[yourMutableString copy] autorelease];    
    NSLog(@"immutableString2=%d,%d",immutableString2 ,yourMutableString);    

第三種,使用(NSString *)類型強(qiáng)制轉(zhuǎn)換方法

NSString *immutableString3 = (NSString *)yourMutableString;    
    NSLog(@"immutableString3=%d,%d",immutableString3 ,yourMutableString);    

第四種,使用NSString stringWithFormat:方法

NSString *immutableString4 = [NSString stringWithFormat:@"%@",yourMutableString];    
    NSLog(@"immutableString4=%d,%d",immutableString4 ,yourMutableString);    

如果使用不當(dāng),將會(huì)出現(xiàn)這樣的錯(cuò)誤"Incompatible pointer types assigning NSMutableString to NSString"。</span>

這里涉及到兩個(gè)重要的概念:指針變量和實(shí)際對(duì)象

Immutable strings

//  Setup  two  variables  to  point  to  the  same  string 
NSString * str1 = @"Hello World"; 
NSString * str2 = str1; 

//  "Replace"  the  second  string 
str2 = @"Hello ikilimnik"; 

//  And  list  their  current  values 
NSLog(@"str1 = %@, str2 = %@", str1, str2); 


output:str1 = Hello World, str2 = Hello ikilimnik 

Mutable strings 
//  Setup  two  variables  to  point  to  the  same string
NSMutableString * str1 = [NSMutableString stringWithString:@"Hello World"]; 

NSMutableString * str2 = str1;
// "Replace" the second string
[str2 setString:@"Hello ikilimnik"];
// And list their current values
NSLog(@"str1 = %@, str2 = %@", str1, str2);

注意,當(dāng)你使用不可變的NSString class時(shí),替換舊的字符串的唯一方式就是創(chuàng)建一個(gè)新的字符串然后更新你的變量“str2”
來(lái)指向這個(gè)新的字符串。這個(gè)操作不會(huì)影響“str1”所指向的內(nèi)容,因此它將繼續(xù)指向初始的字符串。

在NSMutableString的例子里,我們沒(méi)有創(chuàng)建第二個(gè)字符串,而是通過(guò)改變已經(jīng)存在的可變字符串“str2”的內(nèi)容來(lái)代替。
由于str1和str2兩個(gè)變量都仍然指向同一個(gè)字符串對(duì)象,從nslog中可以看到它們值都將會(huì)被更新。

理解指針變量和它實(shí)際指向?qū)ο蟮牟煌欠浅V匾?。一個(gè)NSString對(duì)象是不可變的,但是這并不阻止你改變指向這個(gè)不
可變對(duì)象的指針的值。

"NSString *"這個(gè)數(shù)據(jù)類型代表一個(gè)NSString對(duì)象的指針,不是NSString對(duì)象本身。
"NSMutableString *"這個(gè)數(shù)據(jù)類型則是代表"NSMutableString"對(duì)象本身,這兩者是有區(qū)別的。

這也是有的時(shí)候我們使用NSMutableString類型字符串時(shí),要使用copy的原因,因?yàn)榭赡懿幌敫淖冃碌淖址畷r(shí)影響到舊的字符串的值。
如:
NSMutableString * str2 = [str1 mutableCopy];
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容