賦值: 安全
NSString * str = @"123"; // 這段代碼的含義其實就是附一個常量給str,該部分由系統自動管理,不須要release釋放,是會autorelease的。 函數
NSString * str = [[NString alloc] initWithString :@"111"]; // 這種寫法自己存在問題,由於這個代碼的含義是說給str附一個常量,所以會被編譯器優化,所以也是不須要release的,儘管有alloc出現。 優化
NSString * str = [[NSString alloc] initWithFormat:@"123"] ;// 必需要進行release才能夠,由於這樣就會致使內存泄露。 ui
NSString * str = [[NSString stringWithFormat:@"111"];// 則個不須要release,也不會產生內存泄露,由於該部分調用的是系統的類方法,也就是會autorelease。這種方法其實也被稱之爲臨時的變量使用方法。 spa
補充一點內容: .net
一、initWithFormat是實例方法 orm
只能經過 NSString* str = [[NSString alloc] initWithFormat:@"%@",@"Hello World"] 調用,可是必須手動release來釋放內存資源 對象
二、stringWithFormat是類方法 blog
能夠直接用 NSString* str = [NSString stringWithFormat:@"%@",@"Hello World"] 調用,內存管理上是autorelease的,不用手動顯式release 事件
解決辦法有二個:
一、
NSString * str = [[NSString alloc] initWithFormat:@"%@",@"abc"];
label.text = str;
[str release]
最後在dealloc中再[label release]
二、
label.text = [NSString stringWithFormat:@"%@",@"abc"];
另外,對於函數調用,也會常常用到nsstring做爲一個返回值。所以一個比較正確的函數的處理方法以下:
一個方法,返回一個NSString對象,在事件中調用方法.並嘗試release 方法返回的NSString對象.