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的地址不一致。
