Objective C第2版第9章 記憶體管理

2021-07-11 04:30:36 字數 1417 閱讀 1178

記憶體管理主要基於指標物件進行,作用於使用alloc、new、copy關鍵字建立的指標物件。***withcapacity方法,或者別的方法建立的例項物件,無需進行記憶體管理,假設已經將計數器+1且設定為自動釋放。

記憶體管理主要有2種方法實現:一種是禁用arc功能,通過手動呼叫記憶體管理方法進行實現;第二種是啟用arc功能,系統自動判斷物件計數器值執行相應的釋放操作。

記憶體管理主要方法如下:

1) retain:用於增加計數器值,+1

2) release:用於減少計數器值,-1

3) autorelease:用於設定物件自動釋放記憶體,並不會改變計數器值

4) dealloc:用於釋放物件,當計數器值為0時啟動啟用

5) retaincount:用於獲取當前指標計數器

在訪問方法中,先保留新物件,再釋放物件就不回出現問題了。

一:可通過nsautoreleasepool類實現自動釋放池,將需要進行記憶體管理的**寫在release方法之間,當程式**執行release方法後會自動釋放當前釋放池中所有物件。

二、可通過@autoreleasepool{}實現,在此**塊之間的程式**無需進行記憶體管理操作,自動釋放池會自動進行管理。

自動釋放池的工作原理:自動釋放池釋放前的nslog函式優先於類中dealloc方法中定義的nslog函式。

引用分為:強引用(strong reference)、弱引用(week reference)、歸零弱引用(zeroing weak reference)。

擁有者許可權針對可保留物件指標(rop)與不可保留物件指標(non_rop),分為下面3種:結構體(struct)和集合(union)不能作為rop的成員。

**為:

nsstring *thestring = @「learn objective-c」;

cfstringref cfstring = (cfstringref)thestring;

_bridge:轉換會傳遞指標但不會傳遞它的所有權。**如下:

cfstring = (_bridge cfstringref)thestring;

_bridge_retained:轉換會傳遞指標,所有權會轉移到non_rop上。**如下:

cfstring = (_bridge_retained cfstringref)thestring;

_bridge_transfer:所有權會轉交給rop。**如下:

cfstring = (_bridge_tranfer cfstringref)thestring;

異常管理:可通過@try、@catch、@finally、@throw實現,無論如何,@finally**塊都會執行,即使@catch**塊觸發,也是優先執行@finally。異常管理中管理記憶體的方法:在@catch中保留指標,在@finally中釋放自動釋放池,並設定指標自動釋放。

遊戲設計藝術 第2版 第9章 讀書筆記

創造乙個巨集偉的體驗,必須了解受眾會喜歡什麼,而且比他們自己更加了解這些。很多時候人們並不知道喜歡什麼,可能覺得自己知道,但是他們認為想要的東西和他們真正想要的東西經常有很大的差異。關鍵 傾聽。設身處地 把自己放在他們的位置上。適應身體視角,適應精神視角,把自己投射到玩家們思維中。人群特徵 每個人都...

《Lua程式設計 第4版 》 第9章練習答案

lua的閉包真的很強大!function derivative f,delta delta delta or 1e 5 return function x return f x delta f x delta endendfunction integral f,delta delta delta o...

C 高階程式設計(第9版) 第06章 陣列

好久沒發東西了 一停下來就會變懶。雖然沒完成,也就是它吧 以下正文 本章要點 1 簡單陣列 2 多維陣列 3 鋸齒陣列 4 array類 5 作為引數的陣列 6 列舉 7 元組 8 結構比較 同一型別和不同型別的多個物件 如果需要使用同一型別的多個物件,就可以使用集合 參見第10章 和陣列。c 用特...