類創建對象,每個對象在內存中都占據一定的存儲空間,每個對象都有一份屬于自己的單獨的成員變量,所有的對象公用類的成員方法,方法在整個內存中只有一份,類本身在內存中占據一份存儲空間,類的方法存儲于此。
isa指針
1.每一個對象都包含一個isa指針.這個指針指向當前對象所屬的類。
2.[p eat];表示給p所指向的對象發送一條eat消息,調用對象的eat方法,此時對象會順著內部的isa指針找到存 儲于類中的方法,執行。
3.isa是對象中的隱藏指針,指向創建這個對象的類。
4.通過isa指針我們可以在運行的時候知道當前對象是屬于那個Class(類)的
內存分區情況
1.代碼區:存放函數二進制代碼
2.數據區:系統運行時申請內存并初始化,系統退出時由系統釋放.存放全局變量、靜態變量、常量
3.堆區:通過alloc等函數或new等操作符動態申請得到,需程序員手動申請和釋放
4.函數模塊內申請,函數結束時由系統自動釋放.存放局部變量、函數參數
棧和堆的分配方式:堆都是動態分配的,沒有靜態分配的堆。????????????????????????????????棧有2種分配方式:靜態分配和動態分配。靜態分配時便一起完成的,比如局部變量的分配。動態分配由alloc函數進行分配,但是棧的動態分配和堆是不同的,他的動態分配是由編譯器進行釋放,無需我們手工實現。