記憶體管理中的retain和release用法

2021-09-30 11:24:58 字數 544 閱讀 8910

範圍:

任何繼承了nsobject

的物件,對基本資料型別無效。

原理:1,每個物件內部都儲存了乙個與之相關聯的整數,稱為引用計數器。

2,當使用alloc,new或者copy建立乙個物件時,物件的引用計數器被設定為1

3,呼叫物件的retain方法,可以使引用計數器值+1

呼叫物件的release方法,可以使引用計數器值-1

4,當乙個物件的引用計數器的值為0時,那麼它將被銷毀,其占用的記憶體會被系統**,oc也會自動向物件傳送一條訊息dealloc訊息(即呼叫dealloc            方法),一般情況下要重寫dealloc方法,在這裡釋放相關的資源。一定不要直接呼叫dealloc方法。

5,可以呼叫物件的retaincount方法獲取當前物件的引用計數器值。

記憶體管理原則:

1,誰建立,誰釋放。如果你建立了乙個物件,那麼,你一定要呼叫release或者autorelease。

2,誰retain, 誰release 。只要呼叫了retain,無論物件是如何生成的,你都要呼叫release.

記憶體管理1retain和release

student.h import inte ce student nsobject property int age 缺省會生成乙個 age屬性 end student.m import student.h implementation student synthesize age age 中可以不...

retain和copy的區別

當手動進行記憶體管理時,對於 物件,在 方法中可以使用 對於普通 物件使用 對於 使用 retain 使當前物件的引用計數 1,在 物件中使用 copy 建立乙個物件副本,和呼叫 方法的物件不是同乙個,常常在 中使用 深複製 mutablecopy 深拷貝為物件拷貝,原來的物件計數器不變。淺複製 淺...

retain和copy還有assign的區別

1.接觸過c,那麼假設你用malloc分配了一塊記憶體,並且把它的位址賦值給了指標a,後來你希望指標b也共享這塊記憶體,於是你又把a賦值給 assign 了b。此時a和b指向同一塊記憶體,請問當a不再需要這塊記憶體,能否直接釋放它?答案是否定的,因為a並不知道b是否還在使用這塊記憶體,如果a釋放了,...