iOS的内存管理始终是开发者面临的大问题,内存占用过大时,很容易会被系统kill掉,开发者需要尽可能的优化内存占用问题。

现在的App界面做的越来越精致,里面集成了大量的图片,笔者首先想到的就是如何减少这些图片占用的内存。

通常我们加载图片使用以下方式: 1.imageNamed: 图片加载完成后,系统会把它缓存在内存中,当第二次加载时,直接就从内存中读取了,好处是加载速度过,缺点就是会一直占用系统内存,当我们的图片需要反复加载时,这种方式是一种不错的选择; 2.imageWithContentOfFile: 图片只加载一次,不会缓存在内存中,用完后就把占用的内存释放掉,每次都重新加载,这种加载方式适合只加载少次的情况。

Asset Catalog 是苹果推出的新的图片资源管理工具,方便、直观 打包时,苹果会将图片资源统一打包成.car的文件,我们获取不到里面的图片路径,也就无法使用imageWithContentOfFile的方式加载了,只能使用imageNamed来加载,也就意味着加载过的图片全都缓存在了内存里,这样,整个App占用的内存就会比较大,被系统kill掉得风险就大了。

解决办法: 由于之前的工程一直使用Asset Catalog方式管理图片资源,现在需要想办法减少整个App的内存占用。首先想到的方法就是把图片从Asset Catalog中移出来。 把Asset Catalog目录下地所有内容都Copy出来,然后将Asset Cataglog整个目录删掉。

如果是原来使用Asset Catalog正确的话,@1x, @2x, @3x素材添加正确的话,这样做直接就OK了,是没有问题的。 如果有不当使用的话就麻烦了, 诸如命名不当的小问题,直接这样读取就会出现问题,需要我们手动解析并加载。

进入Asset Catalog目录: echo “{"assets\”: [“ > a.json find Images.xcassets/ -name *.json | while read jsonfile; do tmppath=${jsonfile%.imageset/ } assetname=${tmppath## /} echo ”{\“assetname\”:\“${assetname}\”,\“content\”:“ >> a.json cat $jsonfile >> a.json; echo ‘},’ >>a.json done echo ‘]}’ >>a.json

去掉最后一个逗号,a.json就成了一个标准的JSON文件,我们需要做的就是解析此文件,根据实际情况加载不同的文件。

使用Category的方式扩展UIImage类,重写imageNamed方法,这样原来所有带缓存的加载方式就变成了不带缓存的方式,当然,这个需要灵活处理,哪些图片需要加载之后缓存在内存,哪些不需要缓存在内存,都要分开处理。

iOS图片缓存的更多相关文章

  1. iOS图片缓存框架SDWebImage

    本文转发至: http://blog.csdn.net/uxyheaven/article/details/7909373 http://www.cocoachina.com/ios/20141212 ...

  2. Fast Image Cache – iOS 应用程序高性能图片缓存

    Fast Image Cache 是一种在 iOS 应用程序中高效.持续.超快速的存储和检索图像的解决方案.任何良好的 iOS 应用程序的用户体验都应该是快速,平滑滚动的,Fast Image Cac ...

  3. iOS网络加载图片缓存策略之ASIDownloadCache缓存优化

    iOS网络加载图片缓存策略之ASIDownloadCache缓存优化   在我们实际工程中,很多情况需要从网络上加载图片,然后将图片在imageview中显示出来,但每次都要从网络上请求,会严重影响用 ...

  4. ios开发清除SDWebImage图片缓存

    一:一般在实际的项目应用中都会用到第三方框架SDWebImage去下载缓存图片,但在ios开发应用中,常常涉及对SDWebImage缓存图片的清除.本文所列出代码即是对SDWebImage缓存图片的清 ...

  5. IOS编程 图片缓存模块设计

    手机客户端为什么会留存下来?而不是被一味的Wap替代掉?因为手机客户端有Wap无可替代的优势,就是自身较强的计算能力. 手机中不可避免的一环:图片缓存,在软件的整个运行过程中显得尤为重要. 先简单说一 ...

  6. iOS开发--基于AFNetWorking3.0的图片缓存分析

    图片在APP中占有重要的角色,对图片做好缓存是重要的一项工作.[TOC] 理论 不喜欢理论的可以直接跳到下面的Demo实践部分 缓存介绍 缓存按照保存位置可以分为两类:内存缓存.硬盘缓存(FMDB.C ...

  7. IOS把图片缓存到本地的几种方法

    把图片缓存到本地,在很多场景都会用到,如果是只储存文字信息,那建一个plist文件,或者数据库就能很方便的解决问题,但是如果存图片到沙盒就没那么方便了.这里介绍两种保存图片到沙盒的方法. 一.把图片转 ...

  8. 实现iOS图片等资源文件的热更新化(三):动态的资源文件夹

    简介 此文,将尝试动态从某个不确定的文件夹中加载资源文件.文章,会继续完善自定义的 imageNamed 函数,并为下一篇文章铺垫. 这么做的意义 正如我们经常所说的那样,大多数情景知道做事的意义往往 ...

  9. iOS图片加载框架-SDWebImage解读

    在iOS的图片加载框架中,SDWebImage可谓是占据大半壁江山.它支持从网络中下载且缓存图片,并设置图片到对应的UIImageView控件或者UIButton控件.在项目中使用SDWebImage ...

随机推荐

  1. java基础-迭代器(Iterator)与增强for循环

    java基础-迭代器(Iterator)与增强for循环 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Iterator迭代器概述 Java中提供了很多个集合,它们在存储元素时 ...

  2. spring-boot添加自定义拦截器

    spring-boot中的WebMvcConfigurerAdapter类提供了很多自定义操作的方法,先贴出来大家看看 package org.springframework.web.servlet. ...

  3. css文字超出显示省略号

    单号: white-space:nowrap; overflow:hidden; text-overflow:ellipsis; 多行: word-break: break-all; text-ove ...

  4. 【Swift】UILabel的简单操作方法

    @IBAction func buttonClick_LabelCtrl(sender: AnyObject) { //定义CGRect来初始化UILable var frame: CGRect = ...

  5. ubuntu环境下eclipse的安装以及hadoop插件的配置

    ubuntu环境下eclipse的安装以及hadoop插件的配置 一.eclipse的安装 在ubuntu桌面模式下,点击任务栏中的ubuntu软件中心,在搜索栏搜索eclipse 注意:安装过程需要 ...

  6. (转)Oracle 字符集的查看和修改

    一.什么是Oracle字符集 Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系.ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据.它使数据库 ...

  7. Python概念-Item系列(林海峰教的)

    这个Item系列是egon老师自创的,个人还是可以接受这种文化底蕴的,所以直接拿来用,也是毫无违和感的 所谓Attr系列,其实是__setattr__,__delattr__,__getattr__ ...

  8. Fetch API 了解 及对比ajax、axois

    Fetch是什么 Fetch 是一个现代的概念, 等同于 XMLHttpRequest.它提供了许多与XMLHttpRequest相同的功能,但被设计成更具可扩展性和高效性.Fetch被很多浏览器所支 ...

  9. [转]closed-form solution (闭合解/解析解)和数值解的理解

    参考整理自:http://hi.baidu.com/cjb366/item/7290773b2d2eb9f2a9842873 closed-form solution :一般翻译为闭合解/解析解.这一 ...

  10. Spring4笔记10--SSH整合1--Spring与Hibernate整合

    SSH 框架整合技术: 1. Spring与Hibernate整合(对比Spring与JDBC模板): Service业务层代码和测试类都不变,添加实体类的映射配置文件: <?xml versi ...