1内存管理
1.1 生命周期
创建(alloc或者new)--->生存(接受消息和执行方法)--->交友(借助方法的组合和参数)--->死亡(被释放)1.2引用计数
在Objective-C中,通过为每个对象关联了一个整数来表示有多少个人在引用这个对象,当这个引用值为0时,表示此时这个对象已经无人引用,应该释放掉这个对象所占用的内存。那么这样的内存管理方式称之为引用计数,类似于C++中的智能指针。1.2.1 何时置引用计数为1
当使用alloc、new或者通过copy创建一个对象时,这个对象的引用计数值为设为1.1.2.2 何时增加引用计数值?
当使用retain方法时,调用该方法的对象的引用计数值就增加了1.1.2.3 何时减少引用计数值?
当对对象发送release消息时,对象的引用计数值就减一了,当被减到0时,Objective-C就自动向该对象发送dealloc消息,从而释放其内存。1.2.4 获取引用计数的值:
可以通过 -(unsigned)retainCount这个方法来获取eg: unsigned count = [str retainCount]; //假设str是一个NSString的实例对象
2自动释放池:NSAutoreleasePool
2.1工作机制:
NSAutoreleasePool管理着多个实体对象,当池被销毁时,自动释放池将先向其容纳的所有实体对象发送release消息。然后再销毁自己。
2.2如何将一个对象纳入池中进行管理?
NSObject提供了一个方法autorelease来实现这一效果。eg: NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]
NSString str = @"it' will be push to pool";
//设置str自动释放。
[str autorelease];
....
//最后销毁自动释放池
[pool release]
3 内存管理原则:
一、如果使用new、alloc或copy操作获得一个对象,则该对象的引用计数值为1二、如果是通过任何其他方法获取一个对象,则假设对象的引用计数值为1且已被设置为自动释放。
三、如果retain了某一个对象,则retain和release必须成对使用。
注:这篇文章:http://www.cocoachina.com/bbs/read.php?tid-15963.html(感谢该博主)
由浅入深地讲解了Objective-C中的内存管理机制。