深入理解Objective C中字串常量

2021-06-25 14:22:08 字數 1126 閱讀 8856

在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...