iOS NSstring注意的地方


賦值:
安全


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 事件


常常在uilable的填寫中,使用到字符串,所以也就很是容易形成內存泄露。比較正確的方法以下兩種:


解決辦法有二個:

一、

NSString * str = [[NSString alloc] initWithFormat:@"%@",@"abc"];

label.text = str;

[str release]

最後在dealloc中再[label release]

二、

label.text = [NSString stringWithFormat:@"%@",@"abc"];

另外,對於函數調用,也會常常用到nsstring做爲一個返回值。所以一個比較正確的函數的處理方法以下:


一個方法,返回一個NSString對象,在事件中調用方法.並嘗試release 方法返回的NSString對象.

[objc]  view plain copy
  1. <span style="color:#454545">-(NSString*) createNewString{  
  2.     //狀況1 -</span><span style="color:#ff0000">- 須要本身釋放</span><span style="color:#454545">。  
  3.     return [[[NSString alloc] initWithFormat:@"%@",@"1223344"] autorelease];  
  4.    //狀況2  -</span><span style="color:#ff0000">- 系統自動釋放。 這種方法由於不安全,而且存在含義模糊的狀況,不建議使用。</span><span style="color:#454545">  
  5.     return [[[NSString alloc] initWithString:@"1223344"] autorelease];  
  6.    // 狀況3 -</span><span style="color:#ff0000">- 系統自動釋放。</span><span style="color:#454545">  
  7.    return @"1223344";  
  8. }</span>  
相關文章
相關標籤/搜索