Objective-C内存管理

本文介绍了Objective-C中的内存管理原则,包括alloc/init后的对象需要release、retain或copy的对象也需要release,以及被assign的对象需要斟酌使用retain和release。此外,还解释了autorelease并非自动释放,而是延后释放的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值