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

来源:互联网 发布:淘宝市场行情教学视频 编辑:程序博客网 时间:2024/05/30 04:12

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

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

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

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

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

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

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

我们  需要注意  自动释放池  不会  从实际意义上  包含  物件本身,而  只是  将  需要清理的物件  记录下来而已。

我们  可以对  物件  采取  autorelease这项措施  将  其  添加  到当前的自动释放池当中:

在一项措施的具体内容当中,我们  将  某些物件  标记为  自动释放时,autorelease这项措施  就非常  有用。


原创粉丝点击