android工程師開發IOS oc淺析(14)之MRC與ARC


1.為什么要進行內存管理?管理的是什么?

內存管理,管理的是任何繼承自NSObject的對象,因為一般的其他基本數據類型的局部變量都是儲存在棧區的,當代碼塊執行結束,代碼塊中的局部變量出作用於就會被回收,而OC對象則不一樣,OC對象類型是程序在運行過程中動態分配的,存儲在堆區,其指針存在棧區,當出代碼塊后,作為局部變量的它其指針會被回收,但是堆區中的對象沒有被釋放,造成內存泄漏.

2.MRC

MRC,即Manual Reference Counting,在MRC下,我們根據對象的引用計數器來進行內存管理的.每個對象剛被創建的時候,默認的引用計數器為1,當引用計數器為0的時候,該對象就被銷毀.我們可以把retain,alloc,new,copy看做是對引用計數+1操作,需要在適當的位置調用release或者autorelease使其-1保證沒有內存泄漏. 內存管理的原則,誰創建,誰release;誰retain,誰release.

3.野指針和內存泄漏​

談到內存管理,不得不提到野指針和內存泄漏現象.野指針就是訪問了僵屍對象,也就是訪問了所占內存已經被回收的對象,這將直接導致程序崩潰.內存泄漏則是指不在使用的對象沒有被回收,從而導致內存泄漏,程序閃退.

4.ARC​

ARC,即Automatic Reference Counting,ARC是編譯器特性,而不是運行時特征或者垃圾回收機制,ARC只是在編輯期間,為我們在合適的位置上插入release或者autorelease,我們自己不需要寫retain,release和autorelease.

ARC下內存管理的判斷標准就是對象有無強指針指向,只要沒有強指針指向對象,該對象就會被釋放.所有的指針默認都是強指針,強指針是用__strong修飾的,弱指針用__weak修飾,一般對於循環引用現象,將循環中一個對象設置為__weak就可以解決


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com