iOS記憶體管理

2021-07-04 21:44:03 字數 1196 閱讀 5344

每個物件都有乙個引用計數器(4位元組)

1.引用計數為0的時候物件就會被銷毀(記憶體被**),不為0就不會被銷毀,除非程式退出

2.物件剛建立的時候引用計數為1

引用計數器的數值怎麼計算

1.建立物件時候預設就是1(alloc, new, copy)

2.給物件傳送一條retain訊息 加1

3.給物件傳送一條release訊息 減1

4.給物件傳送一條retaincount訊息 獲取計數器的數值

物件銷毀

銷毀的前提:引用計數器為0

銷毀時做的事情:呼叫dealloc方法

(一定要呼叫[super dealloc])

當物件不存在時不可以再relese 和retain

指向不可以記憶體的指標:野指標錯誤

非arc環境下 [super dealloc]必須寫

多個物件使用同乙個物件,這個物件的引用計數是由這多個物件來控制的,誰使用誰加一,誰不使用誰減一

setdog中

_dog = [dog retain];

記憶體管理就是確保開闢的堆空間被正確的釋放

**法則

1.凡是用alloc, retain, new (或使用new開頭的方法),copy(或使用copy開頭的方法),nsmutablecopy (或使用nsmutablecopy開頭的方法)建立的物件都必須使用release或autorelease方法釋放。

2.誰建立誰釋放(哪個類建立,哪個類釋放,誰寫alloc,誰寫release)

if(_crayfish != crayfish)

_crayfish = [crayfish retain];

非arc環境下 dealloc要自己手動釋放

retain 物件,assign非物件

@property(nonatomic,retain) nsstring *str;

淺拷貝:拷貝指標

深拷貝:物件拷貝

retain只是計數器加一,還是同乙個物件

copy拷貝的物件不可以被修改

nsmutablecopy拷貝的物件可以背修改

mrc物件的釋放看當前物件的引用計數

arc物件的釋放看當前物件有被強引用

__weak弱指標 雖然引用 但是不指向  銷毀物件時不考慮弱指標

相互呼叫時必須有乙個是弱引用

ios記憶體管理

引用計數 每個物件有乙個與之相關的整數,稱作 引用計數器 或者 保留計數器 當某段 需要訪問乙個物件時,該段 會將物件的保留計數器 1,表示需要訪問這個物件 當結束對該物件的訪問時,保留計數器 1,表示它不在訪問該物件 當保留計數器為0時,物件被銷毀,所佔記憶體被系統收回。當使用new retain...

iOS記憶體管理

前提 1 以下是針對cocoa物件,不包括core foundation 2 cocoa物件都是用引用計數來跟蹤物件的記憶體使用情況的。3 在子類裡面父類先初始化和後釋放的原則。自己想下為什麼 棧空間和堆空間的區別。我們說的記憶體管理都是基於堆空間的,因為函式內的棧空間是由編譯器自己控制的。關於co...

IOS 記憶體管理

範圍 任何繼承了nsobject的物件,對基本資料型別無效 原理 每個物件內部都儲存了乙個與之相關聯的整數,稱為引用計數器 當使用alloc new或者copy建立乙個物件時,物件的引用計數器被設定為1 給物件傳送一條retain訊息,可以使引用計數器值 1 給物件傳送一條release訊息,可以使...