關於在堆中建立字串物件的疑惑

2022-02-05 02:23:03 字數 1031 閱讀 4705

方法1.直接賦值: 

nsstring *str1 = @"my string";

方法2.類函式初始化生成:   nsstring *str2 =

[nsstring stringwithstring:str1];

方法3.例項方法初始化生成: nsstring *str3 = [[nsstring alloc]

initwithstring:@"my string"];

nsstring *str4 = [[nsstring

alloc]initwithformat:@"my string"];

nslog(@"---%p",str1);

nslog(@"---%p",str2);

nslog(@"---%p",str3);

nslog(@"---%p",str4);

執行結果;

2013-10-14 10:27:02.650 hfjhdfjdhf[897:c07] ---0x46ac

2013-10-14 10:27:02.651 hfjhdfjdhf[897:c07] ---0x46ac

2013-10-14 10:27:02.651 hfjhdfjdhf[897:c07] ---0x46ac

2013-10-14 10:27:02.652 hfjhdfjdhf[897:c07] ---0x75c2360

區別1: 方法一生成字串時,不會初始化記憶體空間,所以使用結束後不會釋放記憶體;

而其他三個都會初始化記憶體空間,使用結束後要釋放記憶體;

在釋放記憶體時方法2和3也不同,方法2是autorelease型別,記憶體由系統釋放;方法3則必須手動釋放

區別2:用format初始化

的字串,需要初始化一段動態記憶體空間,如:0x75c2360;

而用string宣告的字串,初始化的是常量記憶體區,如:0x46ac,

常量記憶體區的位址,只要值相同,占用的位址空間是一致的。

所以str3和str1的位址一致,但是str4和str1的位址不一致。

關於在堆中建立字串物件的疑惑

方法1.直接賦值 nsstring str1 my string 方法2.類函式初始化生成 nsstring str2 nsstring stringwithstring str1 方法3.例項方法初始化生成 nsstring str3 nsstring alloc initwithstring m...

關於在堆區建立字串的疑惑

方法1.直接賦值 nsstring str1 my string 方法2.類函式初始化生成 nsstring str2 nsstring stringwithstring str1 方法3.例項方法初始化生成 nsstring str3 nsstring alloc initwithstring m...

關於在堆區建立字串的疑惑

方法1.直接賦值 nsstring str1 my string 方法2.類函式初始化生成 nsstring str2 nsstring stringwithstring str1 方法3.例項方法初始化生成 nsstring str3 nsstring alloc initwithstring m...