IOS 多个UIImageView 加载高清大图时内存管理

当我们在某一个View  多个UIImageView,且UIImageView都显示的是高清大图,就有可能出现内存警告的问题。如果第一次进入这个view,没有发生内存警告,当再次进入这个view,如果上一次的内存没有及时释放,这一次次的累加,便可导致内存崩溃。

1,UIImage 加载图片的方式。

如果是本地图片,尽量不要使用 [UIImage  imageNamed:nil]; 这种方式,如果使用这种方式加载,只要程序不退出,它便一直会在内存中。

我们可以使用 :

  NSString *path = [[NSBundlemainBundle]pathForResource:@'"图片的名字" ofType:@""];

                        UIImage *image = [UIImageimageWithContentsOfFile:path];


         那两者的优缺点就很明显了,[UIImage  imageNamed:nil]; 只需加载一次,它便在内存中,所以第二次加载速度很快。而第二种加载方式由于我们将它释放掉了,会再次加载。所以选用那种方式,依你情况而定。

2,上面说的第二种方式,虽然可以释放掉,但我们要告诉人家什么时候释放。也就是说,当前显示页面不是这个view时,我们便将它释放掉:

- (void)viewWillDisappear:(BOOL)animated{

[UIImageView removeFromSuperview];

UiImageView = nil;

}

当然,当我们再次进入这个view时,便要将移除掉的view再次添加进来

- (void)viewDidAppear:(BOOL)animated{

[self addSubView:UIImageView];

}

3,上述两种方式,主要解决内存累加的问题。但如果第一次进入view,图片全部渲染在view上时,内存就崩溃了。那我们只能在图片上做文章了。我们加载的高清大图如果差不多都是3000*2000,也可能比这个还大,就算我们的程序是iPad App,iPad 4  的分辨率才多少,这些图远远大于设备的分辨率,完全是资源浪费,所以我们通常的一个做法,便是将这样的图以小尺寸渲染到view上。


推荐使用:

  • UIImage+Resize.h, UIImage+Resize.m

  • Extends the UIImage class to support resizing (optionally preserving the original aspect ratio), cropping, and generating thumbnails.

  • UIImage+RoundedCorner.h, UIImage+RoundedCorner.m

  • Extends the UIImage class to support adding rounded corners to an image.

  • UIImage+Alpha.h, UIImage+Alpha.m

  • Extends the UIImage class with helper methods for working with alpha layers (transparencies).

常用方法:

UIImage *image

UIImage *thumbImage = [imagethumbnailImage:140// This should the size of the view in collection view. example: myCell width is 20 and height is 20.

transparentBorder:0

cornerRadius:0

interpolationQuality:kCGInterpolationMedium];       //生成缩略图

// this "resizedimage" image is what you want to pass to setImage

UIImage * resizedImage = [imageresizedImage:imageview.frame.sizeinterpolationQuality:kCGInterpolationLow];   //生成你想要尺寸的图

造成的问题,要注意缩放的比例,不要导致图片变形,由于尺寸缩小,可能会导致图片模糊,注意缩小的尺寸。

综上可见,每种方法有优点,有缺点。主要依据自己的开发情况,折中使用。

本文转自 卓行天下  51CTO博客,原文链接:http://blog.51cto.com/9951038/1747469,如需转载请自行联系原作者

IOS 多个UIImageView 加载高清大图时内存管理相关推荐

  1. ios 加载大量图片崩溃_加载高清大图崩溃问题

    SDWebImage加载高清大图崩溃问题: 经验证没测试出来,在网上查找根源应该是在iOS7上有问题,特此记录一下 第一种:老版本SDWebImage_v4.2.0 更改源码 这里面对图片的处理是直接 ...

  2. 浅谈android中加载高清大图及图片压缩方式(二)

    这一讲就是本系列的第二篇,一起来聊下关于android中加载高清大图的问题,我们都知道如果我们直接加载原图的话,一个是非常慢,需要等待一定时间,如果没有在一定的时间内给用户响应的话,将会极大影响用户的 ...

  3. android 高清图片,Android加载高清大图

    前两天在面试当中被问到有没有做过加载高清大图,当时确实没有做过,听面试官提到可以动态加载图片的显示区域.回来后在网上找到了一篇鸿洋大神的博文悔啊-_-!为什么早点没有看到.废话不多说代码如下: 一.B ...

  4. 一招解决Android 加载高清大图

    本文转自:http://blog.csdn.net/lmj623565791/article/details/49300989 最近花时间详细拜读了郭神博客的图片加载系列,感觉收获不少.正好想将自己之 ...

  5. 加载大量图片内存暴增导致闪退 Terminated due to memory issue(内存暴增SDWebImage加载高清大图崩溃)

    上传图片一定要压缩,一定要压缩,一定要压缩.(目前手机拍摄的图片一张几M,上传后不压缩,如果几十张一块加载展示时内存画面有点美!如果是后台上传除了需要高清以外的图也需要压缩处理) 下载大量图片时一定要 ...

  6. 关于Andorid加载高清大图(仿sina weibo 里面的长图效果)

    用过sina微博客户端的同学都知道,它里面有一个长图功能. 需求是可以显示比如10000X10000(px)的图片. 如果你直接用bitmap加载图片文件(或者是从inputstream获取到,然后转 ...

  7. ios 图片加载内存尺寸_iOS加载超清大图内存暴涨问题解决

    加载超清大图是会引起内存爆表的问题,最近一直困扰着我. SDWebImage在加载大图时做的不是很好,加载大图内存爆表.YYWebImage会好一点,但还是不行. 当不要求图片质量的情况下,最好是在上 ...

  8. AsyncLoadLocalImage ios 加载本地高清大图

    如果你的iOS项目中需要加载项目中或者沙盒中的多张高清大图时,希望这个框架能助你一臂之力. If your iOS project needs to be loaded multi high qual ...

  9. Android_性能优化之ViewPager加载成百上千高清大图oom解决方案

    欢迎加入技术谈论群:714476794 一.背景 最近做项目需要用到选择图片上传,类似于微信.微博那样的图片选择器,ContentResolver读取本地图片资源并用RecyclerView+Glid ...

  10. iOS控制器与视图加载方法

    转载记录, 请看原文: 1. iOS中的各种加载方法(initWithNibName,loadNibNamed,initWithCoder,awakeFromNib等等)简单使用   http://w ...

最新文章

  1. python中基本程序结构_关于Python 程序格式框架的描述,正确的是( )
  2. Visual Studio2005入门.Net系列视频教程
  3. oracle用户登录的认证方式
  4. gin ajax 获取请求参数,go的gin框架从请求中获取参数的方法
  5. 写游戏软件要学什么_为什么要写关于您所知道的(或所学到的)的内容
  6. 计算机操作员高级工试题一,计算机操作员高级工操作题复习资料
  7. AUTOCAD建模足球实体
  8. web前端开发基础入门篇(一)
  9. Twaver-HTML5基础学习(2)基本数据元素(Data)
  10. 在线思维导图制作技巧汇总:超简单思维导图绘制方法
  11. 2004. 职员招聘人数
  12. 电脑硬盘分区太多?如何合并分区?
  13. Outlook/Microsfot邮件配置:QQ邮箱/腾讯企业邮箱
  14. 地图数据设计(四):地图比例尺
  15. centos7安装后ping不通外网问题解决
  16. Xilinx XC7Z020双核ARM+FPGA开发板试用合集——自定义硬件工程
  17. java全栈系列之JavaSE--数组的使用025
  18. mysql fabric搭建_MySQL Fabric 安装部署
  19. 1-3年开发的java学习规划
  20. java 中输入字符的方法(顺便判断元音辅音)

热门文章

  1. 异序二分查找 二分查找方程根 二分查找重复元素最后一个
  2. 【XLL 框架库函数】 TempMissing/TempMissing12
  3. 关于T_SQL中声明变量类型的基础知识。
  4. 在API中发现的好东东
  5. 浏览器,图片格式及特点
  6. Django+xadmin的安装与配置
  7. 9.1.4 前端 - HTML body标签 - 标题,段落,分割线,换行,特殊符号,列表,超链接,图片,div/span,表格,表单,input标签,多行文本,单选/多选,下拉,按钮...
  8. Tensorflow的最佳实践
  9. Hibernate缓存研究
  10. JS中style属性