引用计数
概念:每个对象有一个与之相关联的整数,称作它的引用计数器或保留计数器。
方法:
retain:对象的引用计数器加1.
release:对象的引用计数器减1.
dealloc:释放对象。
autorelease: 自动释放。
规则:
1.当使用new、alloc、copy方法创建一个对象时(拥有对象),该对象的引用计数器值为1.当不再使用该对象时,你要负责向该对象发送一条release或autorelease消息。这样,该对象再其使用寿命结束时被销毁。
销毁方法:dealloc
eg:
-(void) doStuff
{
flonkArray = [NSMutableArray new];// count:1
}
-(void) dealloc
{
[flonkArray release];// count:0
[super dealloc];
}
2.当你通过任何其他方法获得一个对象时(临时对象),则假设该对象的保留计数器值为1,而且已经设置为自动释放,你不需要执行任何操作来确保该对象被清理。如果打算在一段时间内拥有该对象,则需要保留它并确保在操作完成时释放它。
eg:arrayWithCapacity 方法,不需要关心如何销毁该对象。
-(void) doStuff
{
flonkArray = [NSMutableArray arraywithCapacity:17];//临时对象
//count:1 是autoreleased
[flonkArray retain];// count:2, 1:是autorelease
}
-(void) dealloc
{
[flonkArray release];// count:0 (本来是2个计数器,但是有一个计数器为autorelease)
[super dealloc];
}
3.如果你保留了某个对象,你需要释放或自动释放该对象。必须报纸retain方法河release方法的使用次数相等。
清理自动释放池:
NSAutoreleasePool *pool;
pool = [[NSAutoreleasePool alloc] init];
int i;
for(i=0;i<100000000;i++)
{
id object = [someArray objectAtIndex:i];
NSString *desc = [object descrption];
if(i % 1000 == 0)
[pool release];
pool = [[NSAutoreleasePool alloc] init];
}
[pool release];
垃圾回收:
Objective-c 2.0 引入了自动内存管理机制,也称作垃圾回收。
启用垃圾回收非常简单,只是一种可供选择的功能。选项:“-fobjc-gc”
在对象实例变量使用结束时,一定要赋值为:nil,以取消对该对象的引用并使垃圾回收器知道该对象可以被清理了。
注意:开发iPhone软件不能使用垃圾回收。建议不要在自己的代码中使用autorelease,同时还要避免使用创建自动释放对象的便利函数。
本文介绍了Objective-C中的引用计数机制,包括retain、release、autorelease和dealloc等方法的使用规则,并对比了垃圾回收机制的特点。
1610

被折叠的 条评论
为什么被折叠?



