2015-04-04 59 views
0

大家都說在目標c中,所有對象都存儲在堆中。編譯器可以在堆上爲對象分配內存

誰負責將對象存儲在堆中,是編譯器?

NSString * myName = @「xyz」;

在上面的代碼行中,在編譯時創建的對象。爲什麼? @「xyz」是否存儲在堆或堆棧中?

回答

1

靜態數據(在編譯時定義的數據)存儲在二進制文件(可執行文件,庫或框架)中。當加載該二進制文件時,靜態數據會隨着它加載到內存中。它不在堆或堆棧中。

這包括Objective-C字符串文字,例如@"xyz"

+0

有什麼方法可以將字符串存儲在堆中嗎?這樣你就可以在不再需要的時候釋放它。如果字符串文字總是存儲在靜態內存中,那麼如果您只在一秒鐘內使用該字符串,將會浪費空間。 – JoJo 2015-04-04 05:44:48

+0

您無法取消分配編譯時字符串文字。如果你想要類似的東西,把你的字符串放在你在運行時加載的數據文件中。 – 2015-04-04 05:48:42