NSString經常使用方法總結很詳細:http://justcoding.iteye.com/blog/1405951編輯器
生成一個NSString類型的字符串有三種方法:函數
方法1.直接賦值: NSString *testStr1 = @"a";spa
方法2.類函數初始化生成: orm
NSString *testStr2 = [NSString stringWithString:@"b"];blog
NSString *testStr3 = [NSString stringWithFormat:@"c"];內存
方法3.實例方法初始化生成: 字符串
NSString *testStr4 = [[NSString alloc] initWithString:@"d"];get
NSString *testStr5 = [[NSString alloc] initWithFormat:@"e"];string
區別1: 方法一輩子成字符串時,不會初始化內存空間,因此使用結束後不會釋放內存;it
而其餘三個都會初始化內存空間,使用結束後要釋放內存;
在釋放內存時方法2和3也不一樣,方法2是autorelease類型,內存由系統釋放;方法3則必須手動釋放
區別2:用Format初始化的字符串,須要初始化一段動態內存空間,如:0x6a42a40;
而用String聲明的字符串,初始化的是常量內存區,如:0x46a8,常量內存區的地址,只要值相同,佔用的地址空間是一致的。
因此str3和str1的地址一致,可是str4和str1的地址不一致。
對如今4.4之後的編輯器 NSString *testStr2 = [NSString stringWithString:@"b"]; 這種寫法會報警告了:Using 'stringWithString' with a literal is redundant。也就是說這種寫法是多餘的咯,它的建議是用=@「b」這種方式來代替。