NSString的記憶體管理問題

2022-08-13 06:03:10 字數 836 閱讀 5880

nsstring是乙個不可變的字串物件。這不是表示這個物件宣告的變數的值不可變,而是表示它初始化以後,你不能改變該變數所分配的記憶體中的值,但你可以重新分配該變數所處的記憶體空間。

生成乙個nsstring型別的字串有三種方法:

方法1.直接賦值:     nsstring *str1 = @"my string"; 

方法2.類函式初始化生成:     nsstring *str2 = [nsstring stringwithstring:@"my string"];

方法3.例項方法初始化生成:   nsstring *str3 = [[nsstring alloc] initwithstring:@"my string"];

nsstring

*str4 = [[

nsstring

alloc

]initwithformat

:@"my string"

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

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

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

區別2:用format初始化

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

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

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

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

NSString的記憶體管理問題

nsstring是乙個不可變的字串物件。這不是表示這個物件宣告的變數的值不可變,而是表示它初始化以後,你不能改變該變數所分配的記憶體中的值,但你可以重新分配該變數所處的記憶體空間。生成乙個nsstring型別的字串有三種方法 方法1.直接賦值 nsstring str1 my string 方法2....

NSString的記憶體實現

nsstring等foundation框架提供的類的記憶體管理 1 字串的常量池 在資料區 2 nsstring str1 abc nsstring str2 nsstring stringwithstring abc nsstring str3 nsstring alloc initwithstr...

NSString中的數字問題

在寫學生管理系統的時候,需要判斷student類中 學生姓名中是否有數字,學號 年齡 成績是否全為數字,而在定義時把它們都設為了nsstring,所以需要從nsstring中提取出,或判斷出數字。用於判斷學生姓名 用來判斷姓名和班級 是否含有數字 nscharacterset characterse...