當你看到這篇文章的時候,你一定會覺得現在都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.原則 記憶體管理原則 配對原...