七十三、基础框架(三十一)内存管理-自动释放池
2012-10-29 10:12
344 查看
在以前的博文中 我们 关注过 内存管理的话题。现在 你 应该理解 什么时候 腾空 物件所占用的内存空间,而 什么时候 不腾空 物件所占用的内存空间。虽然 以前博文当中的例子 都非常 小,但是 我们 还是 强调了 注意内存管理的重要性,这样 才能养成 良好的编程习惯 并且 开发出 无泄漏的应用程序。
根据 你所开发的程序类型,理智地使用内存 十分 关键。如果 你编写的程序 属于 互动图形应用程序,那么 这种程序 在执行的过程当中 会生成 大量的物件,于是 你 必须小心 你的程序 在执行的过程中 不会 持续 消耗 内存资源。在这种情况之下 你的责任 就是 用 聪明的办法 管理 你的资源 并且 在不用的时候 将 这些资源 清理出去。这个意思 就是 在程序执行的过程中 清理 内存 而不是 等到 程序中止的时候。
接下来 我们 要更加仔细地 了解 基础框架的内存分配策略。这 涉及到 对自动释放池的深入讨论 和 持续保留物件的思想。同时 你 还会了解到 一个物件的引用计数 。最后 我们 还要了解 一种叫垃圾收集的机制。这种机制 可以减轻 你保留物件、清理物件的负担。但是 你 也会看到 垃圾收集机制 并不适用于 iphone应用程序,于是 你 还是必须理解 内存管理的技巧。
通过以前博文中的程序 你 对 自动释放池 也或多或少地 熟悉了。当你 用 基础框架 编程的时候,你 必须建立 自动释放池 来使用 基础框架提供的物件。系统 在自动释放池当中 对 你的物件 保持跟踪 以便 随后 进行清理。我们 在程序中 可以这样 建立 自动释放池:
自动释放池 建立好过后,基础框架 会自动 将 某些数组物件、字符串物件、辞典物件 和 其他物件 添加 到这个池子里。当你 不再使用 这个池子时,你 可以对 这个池子 采取 drain这项措施:
之所以自动释放池 叫做 自动释放池 是因为 自动释放池 被清理的时候 被标记为自动释放并且添加到自动释放池中的物件 也会被清理掉。实际上 在一个程序当中 你 可以建立 多个自动释放池,并且 你 还可以 在自动释放池当中 再建立 一个自动释放池。
如果 你的程序 生成 大量的临时物件,你 也许 就需要 在程序当中 创建 多个自动释放池。下面的代码片段 就示范了 在for()循环当中 如何建立 自动释放池 并用以清理 临时物件:
我们 需要注意 自动释放池 不会 从实际意义上 包含 物件本身,而 只是 将 需要清理的物件 记录下来而已。我们 可以对 物件 采取 autorelease这项措施 将 其 添加 到当前的自动释放池当中:
在一项措施的具体内容当中,我们 将 某些物件 标记为 自动释放时,autorelease这项措施 就非常 有用。
根据 你所开发的程序类型,理智地使用内存 十分 关键。如果 你编写的程序 属于 互动图形应用程序,那么 这种程序 在执行的过程当中 会生成 大量的物件,于是 你 必须小心 你的程序 在执行的过程中 不会 持续 消耗 内存资源。在这种情况之下 你的责任 就是 用 聪明的办法 管理 你的资源 并且 在不用的时候 将 这些资源 清理出去。这个意思 就是 在程序执行的过程中 清理 内存 而不是 等到 程序中止的时候。
接下来 我们 要更加仔细地 了解 基础框架的内存分配策略。这 涉及到 对自动释放池的深入讨论 和 持续保留物件的思想。同时 你 还会了解到 一个物件的引用计数 。最后 我们 还要了解 一种叫垃圾收集的机制。这种机制 可以减轻 你保留物件、清理物件的负担。但是 你 也会看到 垃圾收集机制 并不适用于 iphone应用程序,于是 你 还是必须理解 内存管理的技巧。
通过以前博文中的程序 你 对 自动释放池 也或多或少地 熟悉了。当你 用 基础框架 编程的时候,你 必须建立 自动释放池 来使用 基础框架提供的物件。系统 在自动释放池当中 对 你的物件 保持跟踪 以便 随后 进行清理。我们 在程序中 可以这样 建立 自动释放池:
1 | NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init]; |
1 | [pooldrain]; |
如果 你的程序 生成 大量的临时物件,你 也许 就需要 在程序当中 创建 多个自动释放池。下面的代码片段 就示范了 在for()循环当中 如何建立 自动释放池 并用以清理 临时物件:
123456789101112131415 | NSAutoreleasePool *temporaryPool;...for(i=0;i<n;++i){ temporaryPool=[[NSAutoreleasePool alloc] init]; ...... [temporaryPool drain];} |
1 | [myObjectautorelease]; |
相关文章推荐
- 七十七、基础框架(三十五)内存管理-一个关于自动释放池的示例
- IOS内存管理,ARC,MRC,自动释放池(基础)
- 四十五、基础框架(三)简单 了解一下 自动释放池
- Objective-C(十六、内存管理,自动释放池,ARC,强指针,弱指针,方法族)——iOS开发基础
- iOS内存管理系列之二:自动释放与便捷方法
- 手动内存管理和自动释放池
- objective-C 的内存管理之-自动释放池(autorelease pool)
- 黑马程序员——OC基础:内存管理和自动引用计数(ARC)
- 内存管理(一):栈区、堆区,成员变量和局部变量,alloc,retain,自动释放池,成员变量及属性的内存管理
- 黑马程序员——OC基础:内存管理和自动引用计数(ARC)
- MRC内存管理2自动释放池
- OC_内存管理(二)对象复制、循环引用问题、自动释放池
- 【深入Cocos2d-x】探索Cocos2d-x中的内存管理-引用计数和自动释放池
- OC视频笔记(数组的内存管理)(OC自动释放池)
- iOS内存管理之:引用计数、ARC、自动释放池autoreleasepool和便捷方法之间的关系
- 移动开发:iOS内存管理之:引用计数、ARC、自动释放池autoreleasepool和便捷方法之间的关系
- 黑马程序员——OC学习之内存管理和自动释放池
- OC中 在ACR内存管理下的自动释放池
- cocos2dx之内存管理的几个自动释放内存的宏及条件判断
- objective-C 的内存管理之-自动释放池(autorelease pool)