微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Objective-C内存管理

原文地址: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,防止在你还需要该对象的时候已经被系统释放掉了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐