OC 物件在記憶體中的儲存

2021-08-02 14:19:09 字數 1431 閱讀 9913

棧:儲存區域性變數

堆:允許程式設計師手動在堆區申請指定的連續的位元組數的空間來使用

bss段:儲存未初始化的全域性變數,靜態變數

資料段(常量區):儲存已經初始化的全域性變數,靜態變數,常量資料

**段:儲存程式的**

當類第一次被訪問的時候,會將類儲存在**段中,這個過程叫做類載入.

一旦類被載入到**區,直到程式結束的時候才會被**

1).當我們建立物件的時候,肯定需要訪問這個類,因為只有訪問了類才知道類中有哪些成員

2).如果只是宣告類指標的時候,也會訪問這個類,以確定這個類是否真的存在1).類的本質:我們自定義的資料型別

hmperson *p1 = [hmperson new];

2).hmperson *p1;

僅僅是生命了1個指標變數而已,這個指標變數的型別是hmperson*

p1是區域性變數,儲存在棧區

p1只能儲存位址

p1是1個指標變數,不是1個物件

3).[hmperson new];
真正的建立物件

new做的事情

a. 在堆記憶體中申請一塊合適大小的空間

b. 在申請的這塊空間中根據類的模板建立物件

類中有那些屬性,就把類的屬性依次的挨個

isa,是1個指標

這個isa指標指向**段中的類

相同類 isa相同

c.初始化物件的屬性,為物件的屬性賦預設值

->如果屬性的型別是基本資料型別,就賦值

為0->c指標型別 null

->oc指標型別 nil

d.返回這個物件在堆空間的位址

將這個位址賦值給p1指標

p1指標指向了堆空間中的hmperson物件

4).注意
p1指標指向的物件只有屬性+isa指標,沒有方法

通過指標就可以找到物件

p1->_name = @「jack」;

[p1 sayhi]; //通過指標p1找到物件,通過物件中的isa指標找到方法

與null完全等價

oc用nil c用null 表示指標不指向任何空間

hmperson *p1 = nil 訪問屬性會報錯,呼叫方法沒有任何反應

1).hmperson *p1 = [hmperson new];

hmperson *p2 = p1;

p1 和 p2都指向同乙個物件

2).[類名 new]; 代表新建立了1個物件1).#pragma mark 標記名

2).#pragma mark - //華麗麗的分割線

3).#pragma mark - 標記名

4).#warning ——write here ⚠️

資料在記憶體中的儲存

身為乙個天天處理資料的人,不得不說資料在記憶體中的儲存是必須要知道的問題。首先,資料在記憶體中的儲存涉及到作用域,儲存位置等方面的問題。根據資料的作用域,可將資料劃分為區域性變數和全域性變數 區域性變數的作用域為從定義開始到函式執行結束 全域性變數的作用域從程式開始到程式結束。計算機的記憶體分配可以...

變數在記憶體中的儲存

c 中變數在記憶體中的儲存 一 記憶體大致可以分為三部分 區 堆疊區 靜態資料段。c和c 中有全域性變數,靜態變數以及區域性變數等幾類。全域性變數和靜態變數是在編譯的時候就已經分配好在資料段,也就是說在執行main函式之前就已經分配好了位址,如果定義的時候已經初始化,那麼就存放初始化的值,如果沒有初...

資料在記憶體中的儲存

大端,把乙個數字高位位元組序的內容儲存到低位址,低位位元組序內容儲存到高位址處 小端,把乙個數字高位位元組序的內容儲存到高位址,低位位元組序內容儲存到低位址處 判斷乙個機器是大端還是小端?指標判斷 int checksys 聯合體 共用體 union un int main 這裡首先需要知道的是,例...