黑馬程式設計師 oc加強學習(記憶體管理)

2021-07-05 13:31:56 字數 2496 閱讀 6560

記憶體管理的原則 :

1:如果物件有人在使用,那麼就不應該**。如果你想使用這個物件,就應該讓這個物件retain一次。如果你不想用這個物件了,就應該讓這個物件release一次。

2:誰建立 誰release (哪個物件建立了空間,那個物件就release)

3:誰retain 誰release (哪個物件的空間引用計數器retain了,哪個物件就release)

引用計數器

用來儲存當前物件有幾個東西在使用它(數字)

用來判斷物件是否應該**記憶體空間(如果物件不等於nil,當引用計數器為0,此時要**物件的記憶體空間)

操作retain 使得引用計數器+1

release 使得引用計數器-1

retaincount 得到引用計數器的值

如果乙個物件被釋放的時候,會有「臨終遺言」(會呼叫該物件的dealloc方法)

dealloc方法是nsobject的,一般我們要重寫dealloc方法

在dealloc方法內部,要呼叫[super dealloc];

@implementation person

-(void)dealloc

@end

#import #import "person.h"

int main(int argc, const char * argv)

return 0;

}

記憶體管理研究的內容:1:野指標:定義的指標變數沒有初始化或者是指向的空間已經被釋放。2:記憶體洩露:如果棧區的指標變數已經被釋放了,而堆區的空間還沒有釋放,堆區的空間就被洩露。單個物件的記憶體管理(野指標):

1:野指標錯誤:訪問了一塊壞的記憶體(已經被**的不可用的記憶體)。

2:殭屍物件:所佔記憶體已經被**的物件,  殭屍物件不能再被使用。

3:空指標:物件值為空,沒有指向任何東西的指標,給空指標傳送訊息不會報錯。

nil: 表示物件的值

nil:表示類的值

null:通用指標(泛型指標)

[nsnull null]: 是乙個物件,他用在不能使用nil的場合

4: 當乙個物件的空間被釋放了,引用計數器為0,這個物件是殭屍物件,如果再用[物件名  retain]方法是不行的

set方法記憶體管理標準寫法

-(void)setcar:(car *)car

}

@property

引數的使用

arc的概念

強指標:預設的情況下,所有的指標都是強指標,關機子strong

弱指標:__weak關鍵字修飾的指標

在工程中使用arc非常簡單:只需要像往常那樣編寫**,只不過永遠不寫retain,release和autorelease

三個關鍵字就好~這是arc的基本原則。

arc的工作原理

在**編譯時為你自動在合適的位置插入release或autorelease。

arc的判斷準則

只要沒有強指標指向物件,物件就會被釋放

注意:當使用arc的時候,暫時忘記「引用計數器」,因為判斷標準變了。

arc特點總結

1、不允許呼叫release,retain,retaincount

2、允許重寫dealloc,但是不允許呼叫[super dealloc]

3、@property

strong :相當於原來的retain(適用於oc物件),成員變數是強指標

weak  :相當於原來的assign(適用於oc物件),成員變數是弱指標

assign :適用於非oc物件型別(基礎型別)

arc使用注意事項

1、arc中,只要弱指標指向的物件不在了,就直接把弱指標做清空(賦值為nil)操作。

2、 __weak person *p =[[person alloc] init]  不合理,物件一建立處理啊就被釋放掉,物件釋放掉後,arc把指標設定為nil

3、

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

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

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

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

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

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