Object_5(内存管理)

来源:互联网 发布:mac安装win7激活 编辑:程序博客网 时间:2024/05/12 01:12
内存管理
       Object-C为每个对像提供一个内部计数器,这个计数器跟踪对象的引用次数。所有类都继承自NSObject的对象retain和release方法

       当对象被创建或拷贝的时候,引用计数为1.每次保持对象时候,就发送一条retain消息,使其引用计数加1,如果不需要这个对象就发送一个release消息使其引用计数减1,当对象的引用计数为0的时候,系统就会释放它的内存。
       当创建的对象有一下关键字(alloc,copy,retain)时,请记得要调用release释放,原则:谁创建,谁释放。

retainCount 方法用于取得引用计数的int值,当retainCount的值到达0,对象会调用dealloc
dealloc 方法用于释放对象前释放对象的成员变量,其中要先释放自身成员变量,再调用[super dealloc]。
例如:-(void) dealloc{
//释放对象
[one release];
[two release];
[super dealloc];
}

自动释放池(Autorelease pool)
提供了一个对象容器,每次对象发送autorelease消息时,对象d引用计数并不真正变化,而是向内存释放池中添加一条记录,记下对象的这种要求,直到当内存释放池发送drain或release消息时,当被销毁前会通知池中的所有对象,全部发送release消息,真正将引用计数减少。
这些语句必须要放在下面语句之间,直到池被释放,一个对象想要纳入内存释放池对象,必须要发送autorelease。
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]
…...
[pool release];//[pool drain];
0 0