內存管理之引用計數


在一些開發語言中,內存管理使用的是引用計數的方法,比如Python、ObjC等。

采用引用計數,開發人員不需要管理內存,能夠從內存管理繁瑣的工作中脫離出來,從而將更多的精力花費在開發程序上。

引用計數的原理:Python和Objc中的每個對象內部都維護着一個引用計數器,當新建一個對象,或者有其他對象引用該對象時,引用計數器就會加1;當引用減少一次的時候,引用對象的計數器就會減1,當引用計數器為0時,系統會自動的回收這個對象所占用的內存。

舉例來說,在Python中:

a = 5  #分配了一塊內存,該內存的值是對象5,a指向了這塊內存,對象5的引用計數值為1
b = a   #b也指向了對象5所在的內存,此時對象5的引用計數值為2
b = 6   #分配了新的內存,該內存的值是對象6,b指向了這塊內存,對象5的引用計數值減1變為1
del a  #對象5的引用計數再減少1,變為0,此時系統就可以回收對象5所占用的內存

在Python中,查看兩個引用是否指向了同一個對象,可以使用 id() 函數來驗證。

在iOS開發中,從iOS5開始引入了ARC(Automatic Reference Counting)機制,程序在編譯和運行時,Xcode可以自動的給代碼添加內存釋放的代碼,因此程序員不再需要手動寫釋放代碼,即 release 操作。

簡單介紹一下ObjC中的內存管理。

在ObjC中,當調用一個對象的 alloc、retain、new、copy方法時,該對象的引用計數器就會加1,當調用該對象的release方法時,該對象的引用計數器就會減1,當一個對象的引用計數器為0時,系統會自動的回收該對象所占用的內存。回收該對象的內存時,會調用該對象的 dealloc 方法。因此,可以通過查看是否調用了dealloc方法來判斷是否釋放了該對象的內存。

由於現在大多數的iOS開發都是基於ARC的,因此就不再詳細介紹iOS的內存管理,如有興趣,可以參考網上的這篇文章:

http://www.cnblogs.com/kenshincui/p/3870325.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM