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. GO_06:GO语言基础之struct

    结构struct 1. Go 中的struct与C中的struct非常相似,并且Go没有class 2. 使用 type <Name> struct{} 定义结构,名称遵循可见性规则(即首 ...

  2. RCNN,fast R-CNN,faster R-CNN

    转自:https://www.cnblogs.com/skyfsm/p/6806246.html object detection我的理解,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别. ...

  3. java基础-基本的输入与输出

    java基础-基本的输入与输出 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.基本的输出 基本的输出,System.out 就是系统的标准输出设备,默认为显示器. 1>. ...

  4. android中service启动后台程序

    Service是Android中一个类,它是Android四大组件之一,使用Service可以在后台执行长时间的操作( perform long-running operations in the b ...

  5. python---CRM用户关系管理

    Day1:项目分析 一:需求分析 二:CRM角色功能介绍 三:业务场景分析 销售: .销售A 从百度推广获取了一个客户,录入了CRM系统,咨询了Python课程,但是没有报名 .销售B 从qq群获取一 ...

  6. 51nod 1534 棋子游戏

    1534 棋子游戏 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 http://www.51nod.com/onlineJudg ...

  7. git fatal: The remote end hung up unexpectedly 错误

    使用git将本地项目添加到远程仓库报以下错误 $ git push -u origin master fatal: The remote end hung up unexpectedly | 11.0 ...

  8. nodejs express 上传文件 (格式 FormData)

    前台代码使用jQuery的ajax: <script type="text/javascript"> $(function(){ $('#file_upload').c ...

  9. How To Configure VMware fencing using fence_vmware_soap in RHEL High Availability Add On——RHEL Pacemaker中配置STONITH

    本文主要简单介绍一下如何在RHEL 7 Pacemaker中配置一个fence_vmware_soap类型的STONITH设备(仅供测试学习). STONITH是Shoot-The-Other-Nod ...

  10. kafka入门(2)- 环境部署

    部署Zookeeper(单机/集群) 1.下载安装文件: http://mirror.bit.edu.cn/apache/zookeeper/ 2.解压文件(本文解压到 D:\zookeeper-3. ...