iOS图片缓存

news/2024/7/20 16:08:06 标签: json, 内存管理

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方法,这样原来所有带缓存的加载方式就变成了不带缓存的方式,当然,这个需要灵活处理,哪些图片需要加载之后缓存在内存,哪些不需要缓存在内存,都要分开处理。


http://www.niftyadmin.cn/n/850430.html

相关文章

liu四声拼音怎么读_拼音基础要打牢,以后的语文学习也会变简单!看资深教师这样教...

拼音学好了,一辈子都受用。可是,一年级的拼音教学只有两个月,有的学生在幼儿园期间学了拼音,有的没有学,不过这些不重要,重要的是学生学明白了吗?有的家长辅导缺少方法,聪明、记忆力…

1467 Radio Transmission

1467 Radio Transmission 这一段时间我和字符串打交道… 啊啊啊啊啊好想颓废啊&#xff0c;为了梦想一定要加油啊 为什么这些字符串的题都这么类似&#xff0c;这又是一个求循环子串的题&#xff1f; 为什么KMP都是这样的&#xff0c;完全的无线传输 #include<iostream&g…

centos源码安装mysql_CentOS 7中源码安装MySQL 5.7.6+详细教程

配置说明Linux版本&#xff1a;Centos7MySQL版本&#xff1a;MySQL5.7.16该文档适用于MySQL版本>5.7.6一、卸载CentOS7默认携带的mariadb包# 检查mariadb安装包[rootwing ~]# rpm -qa | grep -i mysql[rootwing ~]# rpm -qa | grep -i mariadbmariadb-libs-5.5.50-1.el7_2.x…

动态生成TreeView方法(一)

一般情况下生成TreeView我们用的是用递归不建议用递归数据量大了会慢&#xff0c; 小弟今天用SortedList集合实现一下没有技术含量&#xff0c;一看代码大家就会明白。个人也比较喜欢这种方法&#xff0c;数据量大了执行速度也可以。 下一篇方法动态生成TreeView&#xff08;二…

1471 phone list

1471 phone list 很显然&#xff0c;这是一个trie的模板题&#xff0c;可惜&#xff0c;我一点思路都没有 算是很模板的题目了 就是在建树的时候需要进行一个小小的常识&#xff0c;这些小常识我们必须在纸上推出来 如果我们发现当前的节点没有&#xff0c;需要在 trie上重新建…

Java 内存释放

 问题一什么叫垃圾回收机制 垃圾回收是一种动态存储管理技术它自动地释放不再被程序引用的对象按照特定的垃圾收集算法来实现资源自动回收的功能。当一个对象不再被引用的时候内存回收它占领的空间以便空间被后来的新对象使用以免造成内存泄露。 问题二j…

机器人玛娜图片_银河奥特曼S:玛娜扮演者未婚先孕上推特热搜,机器人也能生孩子...

原标题&#xff1a;银河奥特曼S&#xff1a;玛娜扮演者未婚先孕上推特热搜&#xff0c;机器人也能生孩子银河奥特曼S中机器人玛娜的扮演者&#xff0c;最上摩卡未婚先孕的消息登上推特热搜&#xff0c;引起了许多奥特曼粉丝的围观&#xff0c;虽然已经怀孕&#xff0c;但是31岁…

asp.net安全之设置数据库

一般我们都好直接使用sa用户直接在web.config 配置数据&#xff0c;殊不知这样会带来非常大得隐患&#xff0c;解决办法是建一个权限低得用户解决&#xff0c;具体步骤如下&#xff1a; 1.新建一个登陆用户 2.设置要访问的数据库 本实例中&#xff0c;设置名为Hello的数据库为该…