Objective-C - retain release autorelease

Objective-C在管理内存时,遵循一套简单的规则。

每一个对象都有一个名为"retainCount"的变量,它表示该对象有多少个引用。

class *obj = [class alloc];//alloc会导致retainCount为1

[obj retain];//retainCount++ 通常在对象赋值之后这样做,代表它多了一个引用。

[obj release];//retainCount-- 通常在使用完该对象的时候这样做。

当 retainCount为0时,运行时环境会通过调用[obj dealloc]来释放对象占用的内存。


下面 看一个例子:

Test *t1 = [[Test alloc] initWithNum:12];//创建了一个对象,t1是该对象的引用,由于调用了alloc此时retainCount为1
Test *t2 = t1;//此时t2也要使用该对象
[t2 retain];//t2要使用对象 就必须要retain,此时retainCount为2
[t1 release];//t1这时不用该对象了 就release了,也就是放弃了对象的使用权,此时retainCount为1
[t2 release];//t2使用完了 就release 此时retainCount为0,立刻会调用dealloc来释放内存
其实,规则很简单。谁使用谁就先retain,用完在release就可以了。这样就不会内存泄露了。


oc中存在一个autorelease pool,其实它是一个NSMutableArray。

把对象加入到autorelease pool:

[obj autorelease];
autorelease在释放的时候会给所有的对象发送release,如果该对象的retainCount为1,那么结果导致 retainCount为0,然后运行时就会调用对象的dealloc,以此来实现内存释放。

如果你

[obj retain];

之后没有

[obj release];

在autorelease pool 释放的时候一样会内存泄露!记住autorelease pool只是给对象发送一次release而已!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值