NSString的內存管理問題


NSString是一個不可變的字符串對象。這不是表示這個對象聲明的變量的值不可變,而是表示它初始化以后,你不能改變該變量所分配的內存中的值,但你可以重新分配該變量所處的內存空間。

 

生成一個NSString類型的字符串有三種方法:

方法1.直接賦值:     NSString *str1 = @"my string"

 

方法2.類函數初始化生成:     NSString *str2 = [NSString stringWithString:@"my string"];

 

方法3.實例方法初始化生成:   NSString *str3 = [[NSString alloc] initWithString:@"my string"];

              NSString *str4 = [[NSString alloc]initWithFormat:@"my string"];

 

區別1: 方法一生成字符串時,不會初始化內存空間,所以使用結束后不會釋放內存;

   而其他三個都會初始化內存空間,使用結束后要釋放內存;

   在釋放內存時方法2和3也不同,方法2是autorelease類型,內存由系統釋放;方法3則必須手動釋放

區別2:用Format初始化的字符串,需要初始化一段動態內存空間,如:0x6a42a40;

   而用String聲明的字符串,初始化的是常量內存區,如:0x46a8常量內存區的地址,只要值相同,占用的地址空間是一致的。

   所以str3和str1的地址一致,但是str4和str1的地址不一致。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM