iOS MRC手動記憶體管理 心得體會

2021-07-08 10:47:18 字數 885 閱讀 1641

當你看到這篇文章的時候,你一定會覺得現在都arc了,為何還花時間學mrc,首先要吐槽的的確是這件事

作為自己新的專案,的確沒有必要再學arc,但是對於維護別人的專案,這點就有點必要了,而且對於了解ios的記憶體管理也有很大幫助

雖然我們現在都使用arc,但是對於編譯器而言依然是引用計數的mrc

ios mrc手動記憶體管理 以下是自己除錯出的經驗

首先注意一點:

最好以clean後第一次執行的結果為參考,有時候會有表現不一致的情況

進入正題:

ios的記憶體管理是用引用計數的概念,當一塊記憶體的引用計數為0時,才能被系統**復用

這裡有乙個很重要的概念,屬性,臨時變數和記憶體

我們真正要關心的是記憶體,屬性和臨時變數的引用計數為0,並不代表記憶體會被釋放**,只有真正指向的記憶體計數為0,才能被**;

所以就有了release和nil的區別

release和nil的區別:

release是將物件或者臨時變數指向的記憶體引用計數-1,當為0的時候,可以真正釋放記憶體,物件不能再繼續使用,release能改同時變屬性和臨時變數的引用計數, strong和retain基本上表現一致

而nil是講物件或者臨時變數本身的引用計數-1,當計數為0時,記憶體並不會**,而且物件還能繼續呼叫,所以 = nil是個風險,當記憶體釋放後還能繼續呼叫,但所有屬性都會被置為預設值

陣列的情況:

陣列內的物件會隨著陣列release而release

但是陣列無論release多少次計數都不會為0,最後計數會變成乙個無效數值,此時不能再繼續呼叫它的方法

alloc和自動釋放池的物件表現差不多

自動釋放池的物件無論release多少次,都不會為0,直到pool drain,

當計數變為乙個無效數值時不能繼續呼叫它的方法

OC 手動記憶體管理

一.為什麼要進行記憶體管理 建立乙個oc物件 定義乙個變數 呼叫乙個函式或者方法 二.oc中的記憶體管理是管理的記憶體中的哪一部分 我們知道 記憶體分為五大區域 棧區,堆區,資料去,bss段,區。而最後三者是在程式啟動時由作業系統進行控制的,所以不需要我們管理。棧區儲存的也都是已經初始化的基本資料型...

專案管理之心得體會

團隊管理 1,對下屬要承諾多兌現 承諾太多而兌現太少 則給員工欺騙的感覺,使失去信任。2,要責任明確,不要把自己的任務 下放給下屬去處理,如 工作量的評估確認 讓開發人員自己估計 肯定是不準確的。3,自己有較廣闊的知識,較豐富的人生體驗 不是指工作本身經驗 這樣可使下屬員工更信服於你。4,多激勵員工...

ios之手動記憶體管理

在建立物件的時候,回生成retaincount變數,alloc,new,retain都會使這個值 1,對應的release方法則會使這個值 1。當retaincount 0時系統會呼叫dealloc方法使系統銷毀改物件。所以我們在使用手動記憶體管理時,要注意一下問題 1.原則 記憶體管理原則 配對原...