七十七、基础框架(三十五)内存管理-一个关于自动释放池的示例

本文通过一个实例详细解析了Objective-C中引用计数的工作原理,包括如何使用retain、autorelease及release来管理内存。

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

我们  来看一下  下面这个例子  以便确保  大家  都能够理解  引用次数、增加  引用次数、减少  引用次数  是  怎么一回事。

运行  这个程序后,可以得到  这样的结果:

在这个程序当中  我  创建了  一类假设出来的物件myClass。每个myClass类型的物件  都只包含  一个变量。适用于myClass这类物件的措施  都是  适用于NSObject这类物件的措施。

这个程序  创建了  一个新的myClass类型的物件objectOfMyClass,并且  将  这个物件的地址  存储  在变量objectOfMyClass当中。objectOfMyClass这个物件的引用次数  最初  为  1,因为  这个物件的地址  存储  在变量objectOfMyClass当中。objectOfMyClass这个物件  并没有自动添加  到自动释放池当中,所以  将  自动释放池  倒空后,物件objectOfMyClass这个物件的引用次数  依然  没有改变。

接着  创建了  一个新的自动释放池,并且  对  物件objectOfMyClass  采取了  autorelease这项措施,从而  将  其  添加  到自动释放池。将  物件objectOfMyClass  添加  到自动释放池后,其引用次数  还是没有改变,因为  将  物件  添加  到自动释放池  只是  为这个物件  做上  标记。

接着  对objectOfMyClass这个物件  采取了  retain这项措施,从而  将  这个物件的引用次数  增至  2。当我们  再次  倒空  自动释放池时,物件objectOfMyClass的引用次数  由2  减至了  1。

由于  在倒空  自动释放池之前,物件objectOfMyClass的引用次数  已经为  2了。而  倒空  自动释放池  仅仅  将  物件objectOfMyClass的引用次数  减到  1,所以  物件objectOfMyClass  并不会被清理掉。于是  对  objectOfMyClass这个物件  采取  release这项措施后,这个物件的引用次数  才降至0,从而  被清理掉。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值