ios常用的字串NSString自動釋放理解

2022-06-01 06:51:09 字數 1386 閱讀 5882

最近在做程式的時候,突然發現對於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...