Objective-C内存管理

来源:互联网 发布:最火的网络武侠小说 编辑:程序博客网 时间:2024/04/30 11:32

原文地址:http://c.gzl.name/archives/category/cocoa/cmem

 

Objective-C内存管理

1,你初始化(alloc/init)的对象,你需要释放(release)它。例如:

NSMutableArray aArray = [[NSArray alloc] init];

后,需要

[aArray release];

2,你retain或copy的,你需要释放它。例如:

[aArray retain]

后,需要

[aArray release];

3,被传递(assign)的对象,你需要斟酌的retain和release。例如:

obj2 = [[obj1 someMethod] autorelease];

对象2接收对象1的一个自动释放的值,或传递一个基本数据类型(NSInteger,NSString)时: 你或希望将对象2进行retain,以防止它在被使用之前就被自动释放掉。但是在retain后,一定要在适当的时候进行释放。

 

 

对autorelease的误解

Cocoa的内存管理分为 索引计数法(Reference Counting/ Retain Count)和 垃圾收集法(Garbage Collection)。

 

而iPhone上目前只支持前者,所以autorelease就成为很多人的“捷径”。

 

但是!autorelease其实并不是“自动释放”,不像垃圾收集法,对对象之间的关系侦测后发现垃圾-删除。

 

autorelease其实是“延后释放”,在一个运行周期后被标记为autorelease会被释放掉。

 

切记小心使用autorelease,理解autorelease,防止在你还需要该对象的时候已经被系统释放掉了。

原创粉丝点击