iOS開發學習筆記三 記憶體管理

2021-07-04 01:43:33 字數 1383 閱讀 9509

最近在看唐巧先生著的《ios開發高階》,此內容摘自此書,為方便個人記錄與學習

引用計數的應用:

由於引用計數簡單有效,除了objective-c語言外,微軟的com(component object model)、c++11(c++11提供了基於引用計數的智慧型指標share_prt)等語言也提供了基於引用計數的記憶體管理方式。

使用arc需要注意的問題:

1.過度使用block後,無法解決迴圈引用的問題。

2.遇到底層core foundation物件,需要自己手工管理他們的引用計數。

core foundation物件的記憶體管理:

底層的core foundation物件,大多數以***createwith***這樣的方式建立,例如:

//建立乙個cfstringref物件

cfstringref str = cfstringcreatewithcstring(kcfallocatordefault,"hello world",kcfstringencodingutf8);

//建立乙個ctfontref物件

ctfontref fontref = ctfontcreatewithname((cfstringref)@"arialmt",fontsize,null);

對於這些物件的引用計數的修改,要相應地使用cfretain和cfrelease方法。如下:

//建立乙個ctfontref物件

ctfontref fontref = ctfontcreatewithname((cfstringref)@"arialmt",fontsize,null);

//引用計數加1

cfretain(fontref);

//引用計數減1

cfrelease(fontref);

對於cfretain和cfrelease兩種方法,可以理解為oc物件的retain和release方法等價。

所以對已底層core foundation物件,我們只需要延續以前手工管理引用計數的辦法即可。

除此之外,還有另外乙個問題需要解決。在arc下,我們有時需要將乙個core foundation物件裝換成乙個oc物件,這個時候我們需要告訴編譯器,轉換過程中的引用數需要如何調整。這就引入了與bridge相關的關鍵字,以下是這些關鍵字說明:

1._bridge:製作型別轉換,不修改相關物件的引用計數,原來的core foundation物件再不用時,需要呼叫cfrelease方法

2._bridge_retained:型別轉換後,將相關物件的引用計數加1,原來的core foundation物件在不用時,需要呼叫cfrelease方法

3._bridge_transfer:型別轉換後,將物件的引用計數交給arc管理,core foundation物件再不用時,不需要呼叫cfrelease方法

ios學習筆記之記憶體管理

一,記憶體管理型別定義 1,基本型別 任何c的型別,eg int,short,char,long,long long,struct,enum,union等屬於基本型別或結構體 記憶體管理對於c語言的基本型別無效 2,oc型別 非基本型別 任何繼承於nsobject類的物件都屬於oc型別 也就是除了c...

ios開發 OC記憶體管理的學習

今天我學習了oc中重點的內容,記憶體管理,由於內容較多,需要慢慢消化,下面是具體學習內容 記憶體管理的學習 1.基本實現方法 1 retain 計數器 1,會返回物件本身 2 release 計數器 1,沒有返回值 3 retaincount 獲取當前的計數器 4 dealloc 當乙個物件要被 的...

IOS 學習筆記14 記憶體管理(2)記憶體管理策略

文章中帶有lpstudy的字樣表明是我個人的理解,可能會有不對的地方,敬請指教。html view plain copy 記憶體管理策略 在引用計數機制下,你可以採用nsobject protocol的方法和和標準的方法命名約定進行記憶體管理。nsobject也定義了乙個dealloc方法,它在物件...