2013-03-09 40 views
6

我正在學習Objectiv C,並且從我所瞭解的指針所處的某種未知區域中,我總是聽到「活在堆中」這個術語,但是試圖真正將頭部放在確切的位置。 。「我們應該使我們的財產strong,因此它不會生活在堆中,他說,因爲該財產是私人的,我知道這是一個很大的差異很明顯,我們要確保我們要確保這個對象的引用使得autorelease不會清除它(我們希望從目前爲止所知道的「保留」它),但是我想確保我理解這個術語,因爲它經常被使用。「住在堆裏」是什麼意思?

欣賞它

+0

髖關節或堆????? – Shashank 2013-03-09 03:35:18

+0

@Shashank對不起編輯它,我的壞(這不是我的第一語言:/雖然它不是藉口) – JohnBigs 2013-03-09 03:37:44

+1

「我們應該使我們的財產強大,所以它不會生活在堆」沒有任何意義。如果您指出我們的實際使用情況,這將有所幫助。 – 2013-03-09 03:37:45

回答

14

有三個主要的內存區域使用C(和外部nsion,目標C),用於存儲數據的程序:

  • 靜態區域
  • 自動區域(也稱爲「堆」),以及
  • 的動態區域(也被稱爲「堆「)。

當您分配通過發送它們的類一個newalloc消息對象,將所得物體在動態存儲區域分配,所以對象被說成居住在堆。所有的Objective-C對象都是這樣的(儘管這些對象可能位於三個內存數據區中的任何一個)。相比之下,原始局部變量和數組「存在」在堆棧上,而全局原始變量和數組存在靜態數據存儲中。

只有堆中的對象引用計數,雖然你可以使用malloc/calloc/realloc堆,在這種情況下分配不會是引用計數的分配內存:您的代碼將負責決定何時free的分配了動態內存。