NSString 初始化方法的記憶體比較

2022-08-03 08:54:11 字數 1185 閱讀 7539

nsstring *str1 = @"hello";

nsstring *str2 = @"hello";

nsstring *str3 = [nsstring stringwithformat:@"hello"];

nsstring *str4 = [nsstring stringwithstring:@"hello"];

nsstring *str5 = [[nsstring alloc]initwithstring:@"hello"];

nslog(@"%p //%p //%p // %p //%p",str1,str2,str3,str4,str4,str5);

0x92a88 //0x92a88 //0x796b96b0 // 0x92a88 //0x92a88

ssting的物件在使用@"xx"直接初始化賦值時,它會在記憶體"stack segment"中分配乙個空間,用於儲存該變數。

相同賦值的物件,會採用相同的記憶體空間,表現為記憶體位址相同。

可以理解為nsstring的isa的值是一樣的。

nsstring *str2=@"e中國2";

nsstring *str3=@"e中國2";

// %p for pointers to show the memory address 

nslog(@"str2'addr is %p str3'addr is %p",str2,str3);

使用stringwithformat:工廠方法初始化nsstring物件時,每次都獨立分配記憶體空間。

我懷疑這個空間是在heap segment中,而不是stack segment中。    

即使相同內容的nsstring物件,通過%d獲取的物件的記憶體位址的值不一致。

nsstring *str2=[nsstring stringwithformat:@"e中國%i",2];

nsstring *str3=[nsstring stringwithformat:@"e中國%i",2];

// %p for pointers to show the memory address 

nslog(@"str2'addr is %p str3'addr is %p",str2,str3);

nsstring的比較方法,比較內容應該是isequaltostring:,比較指標的是==比較符號。通常情況下,你需要比較的都會是內容本身而不是其指標值。

Idea內初始化git

利用模板建立完最原始的web專案後就可以在idea內初始化git了,並使用idea的控制台控制git git init 初始化git git status 檢視狀態 git branch 檢視分支 git add 增加所有檔案 git status git commit am first commi...

初始化方法

initialize和load的區別在於 load是只要類所在檔案被引用就會被呼叫,而initialize是在類或者其子類的第乙個方法被呼叫前呼叫。所以如果類沒有被引用進專案,就不會有load呼叫 但即使類檔案被引用進來,但是沒有使用,那麼initialize也不會被呼叫。它們的相同點在於 方法只會...

類初始化 例項初始化 方法重寫

乙個類要建立例項需要先載入並初始化該類 乙個子類要初始化需要先初始化父類 乙個類初始化就是執行 clinit 方法 例項初始化就是執行 init 方法 哪些方法不可以被重寫 物件的多型性 父類 author barrylee 2018年11月10日 下午3 52 33 public class fa...