在objective-c中我們常常會用到常量字串,常量字串和一般的字串還是有一定區別,本文將介紹一些常量字串的特性,加強你的常量字串的認識。請看下面一段**。
nsstring *string1 = @"hello";
nsstring *string2 = @"hello";
if (string1==string2)
你將會得到string1和string2的位址值竟然是相等的,這是編譯器優化的結果。由於常量會占用一塊特殊的**段,載入到記憶體時會對映到一塊常量儲存區,以加快訪問速度,編譯器在編譯時發現string1和string2的內容是相同常量字串,會把它們都指向乙個相同的區域,而不是再開闢出一塊額外的空間。因此它們是相同的位址值。
再看看這段**:
nsstring *string1 = @"hello";
nsstring *string2 = [nsstring alloc];
nsstring *string3 = [string2 initwithstring:string1];
if (string2!=string3)
if (string1==string3)
首先申明這不是一段合法的**,因為在第2行alloc之後沒有立即init,雖然這種做法是非常不推薦的,但這次為了更加清晰地說明問題,不得已而為之。我們首先將看到string2和string3的位址值竟然不相等?而string1和string3竟然相等?這說明如果你使用乙個常量字串來初始化另乙個字串,另乙個字串會直接通過位址賦值為常量字串,alloc的記憶體也會立即釋放。 再看看下面這段**:
nsstring *string1 = [[nsstring alloc] initwithstring:@"hello"];
[string1 release];
[string1 release];
[string1 release];
nslog(@"%@",string1);
string1經過多次release竟然還能繼續訪問?由此說明常量字串不會release。
綜上所述,常量字串由以下特性:
2023年03月27日 mac開發, ios開發
深入理解Objective c中 class的含義
原文 來自 在objective c中,當乙個類需要引用另乙個類,即建立復合關係的時候,需要在類的標頭檔案中建立被引用類的指標。如 car.h 實現類我們先省略,如果你直接這麼編譯,編譯器會報錯,告訴你它不知道tire和engine是什麼。這時候有兩個選擇,乙個是import這兩個被引用類的標頭檔案...
深入理解Objective c中 class的含義
在objective c中,當乙個類需要引用另乙個類,即建立復合關係的時候,需要在類的標頭檔案中建立被引用類的指標。如 car.h 實現類我們先省略,如果你直接這麼編譯,編譯器會報錯,告訴你它不知道tire和engine是什麼。這時候有兩個選擇,乙個是import這兩個被引用類的標頭檔案,另乙個是使...
深入理解Objective c中 class的含義
在objective c中,當乙個類需要引用另乙個類,即建立復合關係的時候,需要在類的標頭檔案中建立被引用類的指標。如 car.h import inte ce car 實現類我們先省略,如果你直接這麼編譯,編譯器會報錯,告訴你它不知道tire和engine是什麼。這時候有兩個選擇,乙個是impor...