ios 进阶 -- 图片内存管理

     最近在做优化程序的性能方面的工作,涉及到了图片内存管理方面,所以这方面的内容总结一下,

1,为什么做图片内存管理?

     问题a,程序启动后,浏览图片时, 内存一直增长。

     问题b,  浏览图片时,程序UI显示不流畅,即使本地的图处,也不流畅。


2,怎么做图片内存管理?

           对应用程序域内的图片内存进行管理, 当程序的多个地方需要 引用一个图片时,都指向同一个图片的内存地址。


3,如何做?

      如果是本地资源时的图片,地址固定,不存在过期问题 我们可以直接 使用系统  [UIImage  ImageName:] 方法。 这个方法本身就做了,内存缓存。 

 多个地方 调用同个图片地址时,它返回的都是同一个内存地址。

      如果是网络图片的话,  我们可以将 网络请求下来的图片放在缓存里,下次再访问时,先检查此图片是否在缓存里,如果在,则直接返回图片,如果没有,则检查则重新请求。

       大至的做法 是,将请求的URL 与图片放在 字典里,  url  做key,   图片内容 做value ,如果 下次再使用图片时,先检查url 的key 时否已经存在就可以了。

     当然我们只是说了大概的原理,忽略许多细节,如图片内存大小管理,图片文件缓存管理,图片同步/异步加载,  图片内存清理时,不同的图片的清理策略  等等,  诸多问题。     

     当然,开源图片内存管理项目比较多,对以上的问题,解决的也比较 好, 以下是我推荐的自己常用的库

     a,  SGImageCache    https://github.com/seatgeek/SGImageCache

[SGImageCache getImageForURL:url thenDo:^(UIImage *image) {
    if (image) {
        self.imageView.image = image;
    }}];


     b,   SDWebImageManager

SDWebImageManager *manager = [SDWebImageManager sharedManager];

UIImage *cachedImage = [manager imageWithURL:url];

if (cachedImage)
{
    // Use the cached image immediatly
}
else
{
    // Start an async download
    [manager downloadWithURL:url delegate:self];
}
(SDWebImageManager *)imageManager didFinishWithImage:(UIImage *)image
{
    // Do something with the downloaded image
}</code>



  转载请标明出处 http://blog.csdn.net/sea918 谢谢。

ios 进阶 -- 图片内存管理,,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。