Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15969
  • 博文数量: 9
  • 博客积分: 370
  • 博客等级: 一等列兵
  • 技术积分: 85
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-10 00:42
文章分类
文章存档

2011年(1)

2010年(5)

2008年(3)

我的朋友
最近访客

分类:

2010-10-05 21:30:43

Objective-C的对象拥有引用计数,对象被创建后其引用计数为1,当其引用计数减少为0时,系统将会销毁此对象。

对象引用计数加1:
- (id) retain;


对象引用计数减1:
- (void) release;
– (void) autorelease;


获得对象当前引用的计数
- (unsigned) retainCount;

通常使用AutoreleasePool自动管理对象的生命周期:

NSAutoreleasePool *pool;
pool = [[NSAutoreleasePool alloc] init];
...
[pool release];

如果过程中创建了大量对象,pool可能无法及时清除这些对象,导致内存占用过高,如果有必要,可以在过程中主动释放pool:

[pool release];
pool = [[NSAutoreleasePool alloc] init];

下面是几条Cocoa内存管理的规则:

  1. 如果你使用new, alloc, copy的方式获得一个对象,它的引用计数为1,由你负责调用release清除此对象。
  2. 如果你retain一个对象,你必须在使用之后对此对象调用release或者autorelease,保持它的引用计数平衡。
  3. 如果你通过其他途径获得一个对象,你不需要做任何事。  

Objective-C 2.0已支持垃圾回收技术(但iPhone不支持),可以在工程信息窗口的Build页,选择Required   [-fobjc-gc-only] 。打开垃圾回收选项之后,要求将不再使用的对象设置为nil以确保其能正确被回收,而其他内存管理方式将会失效。

阅读(744) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~