黑馬程式設計師 OC語言 5 記憶體管理

2021-06-25 07:37:55 字數 1528 閱讀 2767

若排版有錯誤,請檢視pdf版:

2)     管理範圍:任何繼承了

nsobject

的物件,對其他基本資料型別(int、char、float、double、struct、enum等)無效

1)     每個oc物件都有自己的引用計數器,是乙個整數,表示「物件被引用的次數」,即有多少人正在使用這個oc物件。

2)     每個oc物件內部專門有4個位元組的儲存空間來儲存引用計數器。

1)     當使用alloc、new或者copy建立乙個新物件時,新物件的引用計數器預設就是1。

2)     當乙個物件的引用計數器值為0時,物件占用的記憶體就會被系統**。

1)     [p retaincount]; //

獲取當前的計數器

// nslog(@"%d", [p retaincount]);

2)     [p retain]; //

計數器+1

,retain

方法返回的是物件本身。

3)     [p release]; //

計數器-1

,沒有返回值。

4)     dealloc

當乙個物件要被**的時候,就會呼叫

重寫dealloc方法時,一定要呼叫[super dealloc],這句呼叫要放在最後面。

1)     當乙個物件的引用計數器值為0時,它將被銷毀,其占用的記憶體被系統**

2)     當乙個物件被銷毀時,系統會自動向物件傳送一條dealloc訊息

3)     一般會重寫dealloc方法,在這裡釋放相關資源,dealloc就像物件的遺言

4)     一旦重寫了dealloc方法,就必須呼叫[super dealloc],並且放在最後面呼叫

5)     不要直接呼叫dealloc方法

6)     一旦物件被**了,它占用的記憶體就不再可用,堅持使用會導致程式崩潰(野指標錯誤)

exc_bad_access : 訪問了一塊壞的記憶體(已經被**、已經不可用的記憶體)

p = nil; //

空指標:沒有指向任何東西的指標,給其傳送訊息不會報錯。

野指標:指向殭屍物件(不可用記憶體)的指標。

// 當乙個

person

物件被**的時候,就會自動呼叫這個方法

- (void)dealloc

- (book *)book

- (void)dealloc

@end

int main()

1)      基本資料型別:直接複製

- (void)setage:(int)age

1)     一定要[super dealloc],而且放到最後面

2)     對self(當前)所擁有的其他物件做一次release

- (void)dealloc

} // }

表示結束,銷毀釋放池

1)     alloc之後呼叫了autorelease,又呼叫release

@autoreleasepool

黑馬程式設計師 OC 記憶體管理

1.什麼是記憶體管理 管理範圍 任何繼承了nsobject的物件,對其他基本型別無效 2.物件的基本結構 每個oc物件都有自己的引用計數器,是乙個整數,表示 物件被引用的次數 即有多少個人正在使用oc物件 每個oc物件內部專門有4個位元組的儲存空間來儲存引用計數器 3.引用計數器的作用 當使用all...

黑馬程式設計師 OC基礎 記憶體管理

oc的區域性變數在 塊結束時被系統銷毀,記憶體被 oc的物件,內部有引用計數器,當引用計數器的值為0時,被系統銷毀,記憶體被 區域性變數存放在棧中.物件存放在堆中.注意,物件指標還是存放在棧中,物件本身占用的記憶體存放在堆中.在oc中,我們要對自己寫的繼承了nsobject的物件進行記憶體管理.物件...

黑馬程式設計師 OC學習筆記 記憶體管理

property和 synthesize關鍵字 property和 synthesize關鍵字可以幫助我們構造屬性的設定和訪問方法即setter和getter方法,可以省去我們很多重複機械的 在宣告檔案中使用 property 宣告變數,在實現檔案中用 synthesize property 關鍵字...