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

来源:互联网 发布:c语言写文本文件 编辑:程序博客网 时间:2024/05/14 10:02

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

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

在这个程序当中  我  创建了  一类假设出来的物件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,从而  被清理掉。