内存管理

1内存管理

1.1 生命周期

创建(alloc或者new)--->生存(接受消息和执行方法)--->交友(借助方法的组合和参数)--->死亡(被释放)

1.2引用计数

在Objective-C中,通过为每个对象关联了一个整数来表示有多少个人在引用这个对象,当这个引用值为0时,表示此时这个对象已经无人引用,应该释放掉这个对象所占用的内存。那么这样的内存管理方式称之为引用计数,类似于C++中的智能指针。

1.2.1 何时置引用计数为1

当使用alloc、new或者通过copy创建一个对象时,这个对象的引用计数值为设为1.

1.2.2 何时增加引用计数值?

当使用retain方法时,调用该方法的对象的引用计数值就增加了1.

1.2.3 何时减少引用计数值?

当对对象发送release消息时,对象的引用计数值就减一了,当被减到0时,Objective-C就自动向该对象发送dealloc消息,从而释放其内存。

1.2.4 获取引用计数的值:

可以通过 -(unsigned)retainCount这个方法来获取
eg: unsigned count = [str retainCount]; //假设str是一个NSString的实例对象

2自动释放池:NSAutoreleasePool

2.1工作机制:

NSAutoreleasePool管理着多个实体对象,当池被销毁时,自动释放池将先向其容纳的所有实体对象发送release消息。然后再销毁自己。


2.2如何将一个对象纳入池中进行管理?

NSObject提供了一个方法autorelease来实现这一效果。
eg:     NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]
    NSString str = @"it' will be push to pool";
    //设置str自动释放。
    [str autorelease];
    ....
    //最后销毁自动释放池
    [pool release]

3 内存管理原则:

一、如果使用new、alloc或copy操作获得一个对象,则该对象的引用计数值为1
二、如果是通过任何其他方法获取一个对象,则假设对象的引用计数值为1且已被设置为自动释放。
三、如果retain了某一个对象,则retain和release必须成对使用。

注:这篇文章:http://www.cocoachina.com/bbs/read.php?tid-15963.html(感谢该博主)
由浅入深地讲解了Objective-C中的内存管理机制。

转载于:https://my.oschina.net/leojack/blog/91504

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值