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

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