最近在做程式的時候,突然發現對於nsstring的理解還是存在問題的。因此補充一片blog,希望對剛剛進入oc開發並搞不清楚記憶體洩露問題的人一點指引。
賦值:nsstring * str = @"123"; // 這段**的含義其實就是附乙個常量給str,該部分由系統自動管理,不需要release釋放,是會autorelease的。
nsstring * str = [[nstring alloc] initwithstring :@"111"]; // 這種寫法本身存在問題,因為這個**的含義是說給str附乙個常量,因此會被編譯器優化,因此也是不需要release的,儘管有alloc出現。
nsstring * str = [[nsstring alloc] initwithformat:@"123"] ;// 必須要進行release才可以,因為這樣就會導致記憶體洩露。
nsstring * str = [[nsstring stringwithformat:@"111"];// 則個不需要release,也不會產生記憶體洩露,因為該部分呼叫的是系統的類方法,也就是會autorelease。這種方法其實也被稱之為臨時的變數使用方法。
補充一點內容:
1、initwithformat是例項方法
只能通過 nsstring* str = [[nsstring alloc] initwithformat:@"%@",@"hello world"] 呼叫,但是必須手動release來釋放記憶體資源
2、stringwithformat是類方法
可以直接用 nsstring* str = [nsstring stringwithformat:@"%@",@"hello world"] 呼叫,記憶體管理上是autorelease的,不用手動顯式release
經常在uilable的填寫中,使用到字串,因此也就非常容易造成記憶體洩露。比較正確的方法如下兩種:
解決辦法有二個:
1、nsstring * str = [[nsstring alloc] initwithformat:@"%@",@"abc"];
label.text = str;
[str release]
最後在dealloc中再[label release]
2、label.text = [nsstring stringwithformat:@"%@",@"abc"];
另外,對於函式呼叫,也會經常用到nsstring作為乙個返回值。因此乙個比較正確的函式的處理方法如下:
乙個方法,返回乙個nsstring物件,在事件中呼叫方法.並嘗試release 方法返回的nsstring物件.
[objc]view plain
copy
"color:#454545">-(nsstring*) createnewstring
原文
ios常用的字串NSString理解
最近在做程式的時候,突然發現對於nsstring的理解還是存在問題的。因此補充一片blog,希望對剛剛進入oc開發並搞不清楚記憶體洩露問題的人一點指引。賦值 nsstring str 123 這段 的含義其實就是附乙個常量給str,該部分由系統自動管理,不需要release釋放,是會autorele...
iOS字串常用操作集合
一。ios 字串擷取 1.定義乙個字串a,擷取a 的某乙個部分,複製給b,b必須是int型 nsstring a 1.2.30 intb a substringwithrange nsmakerange 4,2 intvalue nslog a n a nslog b d b output 2011...
iOS字串分割常用方法
1.字串的替換 nsstring str 12334dllggg33dlrt str str stringbyreplacingoccurrencesofstring 33 withstring hh nslog str 輸出結果 12hh4dlggghhdlrt 2.通過range分割字串 nss...