您的位置:首页 > 其它

七十三、基础框架(三十一)内存管理-自动释放池

2012-10-29 10:12 344 查看
在以前的博文中 我们 关注过 内存管理的话题。现在 你 应该理解 什么时候 腾空 物件所占用的内存空间,而 什么时候 不腾空 物件所占用的内存空间。虽然 以前博文当中的例子 都非常 小,但是 我们 还是 强调了 注意内存管理的重要性,这样 才能养成 良好的编程习惯 并且 开发出 无泄漏的应用程序。

根据 你所开发的程序类型,理智地使用内存 十分 关键。如果 你编写的程序 属于 互动图形应用程序,那么 这种程序 在执行的过程当中 会生成 大量的物件,于是 你 必须小心 你的程序 在执行的过程中 不会 持续 消耗 内存资源。在这种情况之下 你的责任 就是 用 聪明的办法 管理 你的资源 并且 在不用的时候 将 这些资源 清理出去。这个意思 就是 在程序执行的过程中 清理 内存 而不是 等到 程序中止的时候。

接下来 我们 要更加仔细地 了解 基础框架的内存分配策略。这 涉及到 对自动释放池的深入讨论 和 持续保留物件的思想。同时 你 还会了解到 一个物件的引用计数 。最后 我们 还要了解 一种叫垃圾收集的机制。这种机制 可以减轻 你保留物件、清理物件的负担。但是 你 也会看到 垃圾收集机制 并不适用于 iphone应用程序,于是 你 还是必须理解 内存管理的技巧。

通过以前博文中的程序 你 对 自动释放池 也或多或少地 熟悉了。当你 用 基础框架 编程的时候,你 必须建立 自动释放池 来使用 基础框架提供的物件。系统 在自动释放池当中 对 你的物件 保持跟踪 以便 随后 进行清理。我们 在程序中 可以这样 建立 自动释放池:

1NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
自动释放池 建立好过后,基础框架 会自动 将 某些数组物件、字符串物件、辞典物件 和 其他物件 添加 到这个池子里。当你 不再使用 这个池子时,你 可以对 这个池子 采取 drain这项措施:

1

[pooldrain];

之所以自动释放池 叫做 自动释放池 是因为 自动释放池 被清理的时候 被标记为自动释放并且添加到自动释放池中的物件 也会被清理掉。实际上 在一个程序当中 你 可以建立 多个自动释放池,并且 你 还可以 在自动释放池当中 再建立 一个自动释放池。

如果 你的程序 生成 大量的临时物件,你 也许 就需要 在程序当中 创建 多个自动释放池。下面的代码片段 就示范了 在for()循环当中 如何建立 自动释放池 并用以清理 临时物件:

123456789101112131415NSAutoreleasePool *temporaryPool;...for(i=0;i<n;++i){ temporaryPool=[[NSAutoreleasePool alloc] init]; ...... [temporaryPool drain];}
我们 需要注意 自动释放池 不会 从实际意义上 包含 物件本身,而 只是 将 需要清理的物件 记录下来而已。我们 可以对 物件 采取 autorelease这项措施 将 其 添加 到当前的自动释放池当中:

1

[myObjectautorelease];

在一项措施的具体内容当中,我们 将 某些物件 标记为 自动释放时,autorelease这项措施 就非常 有用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐