参考文档1:http://blog.csdn.net/hudashi/article/details/7709421
内存管理 |
每个对象都有一个与之关联的引用计数(也叫保留计数) |
当使用alloc, new 方法或通过 copy消息(生成接收对象的一个副本)创建一个对象时,对象的引用计数值被设为1; 给对象发retain消息时,增加该值; 发送release消息时,减少该值; 当一个对象的引用计数值变为0时,objective-c会自动向对象发送一条dealloc消息。销毁该对象。 你可以在自己的对象中重写该方法, 使用retainCount消息,可以获取引用计数器的值。 -(id) retain; -(void) release; -(unsigned) retainCount; |
自动释放池:autorelease pool; 创建: NSAutoreleasePool *pool; pool=[[NSAutoreleasePool alloc] init]; 销毁: [pool release]; 注意:xcode自动生成的代码,销毁pool池时,使用的是[pool drain],drain方法只是清空释放池,但不销毁pool.所以在自己编写代码时还是使用release. 而且,drain只适用于MAC OS 10.4以上的版本,而release适用于所有版本。 只有在向某个对象发送autorelease消息时,该对象才会添加到NSAutoreleasepool中,才会被自动释放。 如:[car autorelease]; |
内存管理黄金准则: 只有通过alloc, new和 copy方法创建的对象,才需要程序员负责向该对象发送release或autorelease消息。 而通过其他方法获得的对象,则默认为已经被设置为自动释放,所以不需要程序员做任何操作了。 |
在objective-c 2.0中有垃圾回收机制, 如果要对某个项目使用垃圾回收: 项目信息--build选项卡--查询"garb",出现“objective-c Garbage Collection”,将其值设置为“required[-fobjc-gc-only]” 启用垃圾回收后,通常的内存管理命令全都变成了空操作指令,不执行任何操作。 开发iphone软件,不能使用垃圾回收。 |