【多线程-第三天-NSOperation的练习-tableView异步下载网络图片-图片缓存池 Objective-C语言】

一、图片缓存池

1.下面我们该解决什么问题了,运行一下试试,

往上拽,图片慢慢儿去下载,下载完成以后,会把这个图片缓存到内存中来,假设你手机内存特别小,我手机内存是1G的内存,开了好多个应用,好,现在内存不够用了,收到内存警告了,我们要干什么,处理内存警告,我们是不是得清理出来一部分内存,清理哪部分内存呢,

哪部分内存不需要用了呢,没有显示的那些图片,这些图片,是不是都在内存中存着呢,这些图片,是不是在消耗着内存呢,图片和文字,相比起来,哪个更占内存,图片,

那文字呢,因为文字占的内存特别小,所以文字的事情,我们就不处理了,好,当我收到内存警告之后,现在,我要把缓存的这些图片,全部从内存中清除掉,现在,怎么做,

// 7 当收到内存警告 ,要清理内存

怎么清理,我们的图片都存在哪儿了,内存,内存中具体什么位置,我们在哪儿把这个图片保存下来的,我们想,代码怎么去写,等会儿我们是不是要处理这个代码,所以你不要想着内存的什么位置呢,我们要处理这个代码,我们要把这个图片从内存中给它干掉,怎么干掉,

图片在哪儿呢,图片在模型中,是不是在这个位置记录下来的,

现在,我要把这个图片都干掉,从内存中干掉,怎么干,

我们就想把这个属性的值,给它设置成空,就完了吧,OK吧,怎么写,

那些模型又在哪儿呢,

这个位置呢,在数组中呢,所以当我收到内存警告之后,我要干什么,不是清空数组,数组不能清空,那些数据,那些文字,我还要的,我不想要的仅仅是图片,所以我要干什么,我要去遍历这个数组,找到数组中的每一个模型对象,把这个模型对象中的image属性,取出来,赋成nil,就完了,OK吧,

这种方式,并不简单,因为我们还得自己写循环,还得自己去处理每一个模型对象,不太方便,怎么办呢,我们把之前缓存图片这个过程,重新写一下,不用以前的方式来写了,为什么不用以前的方式来写了,因为当我们收到内存警告,我想释放内存的时候,不太方便,还要自己写循环,每个对象,设成空,

2.那不用以前的方式,那怎么去处理呢,我们这么来处理,自己来创建一个缓存池,以前的时候,我们tableView,tableView的那些cell不用了,是不是放到缓存池里边来,记得吧,那些cell不用了,就放到缓存池里边来,我们现在要自己创建一个缓存池,创建一个什么缓存池呢,图片的缓存池

// 7 当收到内存警告

你可能感兴趣的:(Objective-C,缓存,objective-c,开发语言)