Object-C retainCount

每一個從Cocoa根類NSObject或其子類創建的對象,都象有一個與之相關聯的整數,稱作它的引用計數器或者保留計數器。


1.當使用alloc,new方法或者copy消息創建一個對象時,對象的保留計數器值被設置爲1

2.向對象發送retain信息,保留計數加1

3.向對象發送一條release信息,保留計數減1

4.當對象因其計數器爲0時,objective-c將向對象發送一條dealloc消息,執行對象的dealloc方法釋放資源


你可以在自己的對象中重寫dealloc方法,可以通過這種方法釋放已經分配的全部相關資源。一定不要直接調用dealloc方法。


在代碼中,你可以通過調用NSObject對象的retainCount可以返回對象的引用計數。


但retainCount這個方法在調試內存管理問題是不價值的,因爲很多的框架對象會保持對象計數,你不可能通過個方法獲得有用的信息。


爲調試內存管理問題,你可以使用這三個工具


The LLVM/Clang Static analyzer 在程序運行之前,靜態分析代碼,找出典型常見的內存管理問題,如malloc,release不對稱引起潛在內存泄露問題。

Instruments application 的 Object Alloc instrument 可以跟蹤程序中每個對象 的創建、銷燬的過程.

Shark 也是一個可以進行內存分配分析的工具.

這三個工具是Xcode自帶的工具,功能非常強大,是每一個Mac\iPhone開發者都應該熟悉掌握的工具。


參考文章:


1.NSOjbect Protocal reference
http://developer.apple.com/mac/library/documentation/cocoa/reference/foundation/Protocols/NSObject_Protocol/index.html


2.用Instruments查找iphone 內存泄露的教程
Finding iPhone Memory Leaks: A “Leaks” Tool Tutorial
Instruments這個工具,可以分析iphone模擬器,也可以分析iPhone,iPod真機上運行的程序。

3.序報一個 EXC_BAD_ACCESS 內存訪問異常,如訪問一個已經release的內存指針時,造成程序崩潰也可以用Instruments這個工具來分析,具體可以參考這個教程
iPhone Memory Debugging with NSZombie and Instruments

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章