記憶體管理筆記

2021-07-15 18:05:38 字數 1492 閱讀 3829

mrc手動記憶體管理:

1.系統不會去檢查已釋放的物件,也就是說,當乙個物件的引用計數為0時,這個物件此時再呼叫其方法不會報錯,(成為野指標),除非開啟殭屍除錯診斷,一旦開啟殭屍診斷就會發現崩潰。

2.當把這個物件賦值為nil時,(成為空指標),再呼叫其方法,將不會出錯,更不會崩潰。3.dealloc方法必須含有[super dealloc],且必須放在函式最後一行。當物件的引用計數為0時,系統就會自動呼叫物件的dealloc方法,且程式設計師不能呼叫dealloc方法,只能是系統自動呼叫。

4. alloc retain  release  retaincount dealloc  

5.new,alloc,retain,copy,誰生成誰負責釋放。

6.成員物件初始化時都為nil  

7. set方法在左邊person.name = ?,等同於[person setname: ],get方法右邊? = person.name  

8. set方法:

當你需要乙個物件時,就進行一次retain; 

當你不需要乙個物件時,就進行一次release;

當你接受乙個新的物件時,需要release舊物件,retain新物件;

若新物件與舊物件是乙個物件,就不需要記憶體管理的**。

{9-11 property}

9.retain需要在setter和getter方法中加入一些記憶體管理的**,當屬性是乙個普通oc物件時,使用retain;assign直接賦值,不生成記憶體管理**,當屬性是乙個基本資料時,使用assign;copy複製物件,nsstring使用copy。

10.執行緒安全:nonatomic 非原子,不會生成執行緒安全的**,速度快,ios通常都是這種;atomic原子(預設),會生成執行緒安全的**。

11.控制許可權 readwrite可讀可寫,生成getter和setter方法;readonly只生成getter方法

12. 修改方法名稱修改生成的getter方法的名稱或setter方法的名稱

13.迴圈引用,其中的一端必須為assign或__weak

自動釋放池,只要是從乙個方法裡返回物件,或快捷的構造方法(類方法),都需使用自動釋放池。

自動記憶體管理:dealloc中沒有[super dealloc]。

通過類方法建立的物件都放在離它最近的方法池中。

當自動釋放池銷毀時,才會解除自動釋放對改物件的引用。

mrc轉arc  全部   factor-> mrc convert to arc     區域性某類  -fno-objc-arc   

定義block型別的格式:返回值

(^block名稱)(形參列表)void (^blockname)()  實現格式:^返回值

形參列表 {};        ^ void(){};     int (^sum)(int a, int b) = ^ int (int a, int b);

協議:多型

block輸入按return鍵直接彈出大括號加分號。ibaction右擊彈出選單選事件型別,直接連線到檢視控制器。

記憶體管理實驗筆記

內部sram記憶體池 32位元組對齊 說明一次取出32位元組 效率高 align 32 u8 mem1base mem1 max size align 32 u8 mem2base mem2 max size attribute at 0x68000000 雖然起到管理記憶體的作用 但是同時也帶來了...

C C 記憶體管理 筆記

記憶體管理是個比較複雜的東西,我這裡記錄一些比較重要的筆記。0.永遠保持謙虛的態度來使用指標和操作記憶體。1.在用free釋放記憶體後,要記得將指標賦值為null,防止產生 野指標 2.盡量不要用指標指向常量字串。看乙個小例子 char p abcde p 0 m std cout 用gcc編譯會出...

Unity記憶體管理筆記

底層runtime全部有c 構成 中層為bonding層 注 不確定是不是這個單詞,就是乙個粘合層 以前使用unity自定義的語言,但是因為開發不方便,現在主要使用c 了,作用是將c 和c 連線在一起,大家用到的unity的api都是在這一層提供的,底層執行的還是c 這只是乙個warpper封裝 上...