對象的存儲細節、isa指針和內存分區情況

類創建對象,每個對象在內存中都占據一定的存儲空間,每個對象都有一份屬于自己的單獨的成員變量,所有的對象公用類的成員方法,方法在整個內存中只有一份,類本身在內存中占據一份存儲空間,類的方法存儲于此。

isa指針

1.每一個對象都包含一個isa指針.這個指針指向當前對象所屬的類。

2.[p eat];表示給p所指向的對象發送一條eat消息,調用對象的eat方法,此時對象會順著內部的isa指針找到存 儲于類中的方法,執行。

3.isa是對象中的隱藏指針,指向創建這個對象的類。

4.通過isa指針我們可以在運行的時候知道當前對象是屬于那個Class(類)的

內存分區情況

1.代碼區:存放函數二進制代碼

2.數據區:系統運行時申請內存并初始化,系統退出時由系統釋放.存放全局變量、靜態變量、常量

3.堆區:通過alloc等函數或new等操作符動態申請得到,需程序員手動申請和釋放

4.函數模塊內申請,函數結束時由系統自動釋放.存放局部變量、函數參數

棧和堆的分配方式:堆都是動態分配的,沒有靜態分配的堆。????????????????????????????????棧有2種分配方式:靜態分配和動態分配。靜態分配時便一起完成的,比如局部變量的分配。動態分配由alloc函數進行分配,但是棧的動態分配和堆是不同的,他的動態分配是由編譯器進行釋放,無需我們手工實現。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • __block和__weak修飾符的區別其實是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用,...
    LZM輪回閱讀 3,365評論 0 6
  • 1.寫一個NSString類的實現 +(id)initWithCString:(c*****t char *)nu...
    韓七夏閱讀 3,800評論 2 37
  • 多線程、特別是NSOperation 和 GCD 的內部原理。運行時機制的原理和運用場景。SDWebImage的原...
    LZM輪回閱讀 2,039評論 0 12
  • ———————————————回答好下面的足夠了---------------------------------...
    恒愛DE問候閱讀 1,759評論 0 4
  • iOS面試小貼士 ———————————————回答好下面的足夠了------------------------...
    不言不愛閱讀 2,014評論 0 7