图片资源管理

1. Assets.xcassets

一般是以蓝色的Assets.xcassets的文件夹形式在工程中,以Image Set的形式管理。当一组图片放入的时候同时会生成描述文件Contents.json。且在打包后以Assets.car的形式存在,不能打开(网上有工具ThemeEngine可以打开,感兴趣的可以测试)。
以此方式放入的图片并不在mainBundle中

iOS 开发中一般在工程内导入两个到三个同内容不同像素的图片文件, 一般如下:

image.png (30 x 30)

image@2x.png (60 x 60)

image@3x.png (90 x 90)

这三张图片都是相同内容, 而且图片名称的前缀相同, 区别在与图片名以及图片的分辨率. 开发者将这三张图片拉入 ImageAssets 后, Xcode 会以图片前缀创建一个图片组(这里也就是 “image”). 然后在代码中写:

使用
UIImage *image = [UIImage imageNamed:@"image"];
1.特性: ImageAssets 也是从图片文件中读取图片数据转为 UIImage, 只不过这些图片数据都打包在 ImageAssets 中. 还有一个最大的区别就是图片缓存. 相当于有一个字典, key 是图片名, value是图片对象. 调用imageNamed:方法时候先从这个字典里取, 如果取到就直接返回, 如果取不到再去文件中创建, 然后保存到这个字典后再返回. 由于字典的key和value都是强引用, 所以一旦创建后的图片永不销毁.> 
2. 优势: 性能好,节省Disk。Asset Catalogs会用一个高度优化的特殊格式来存所有图片,而不是一个一个的单独的图片资源,会更少的涉及频繁Disk I/O操作,且会按需下载适合你机型的合适分辨率的图片资源; 安全性。图片资源得到一定程度保护(Asset,car不易打开)当一个 icon 在多个地方需要被显示的时候, 其对应的UIImage对象只会被创建一次, 而且多个地方的 icon 都将会共用一个 UIImage 对象. 减少沙盒的读取操作.> 
 1. ImageAssets 的使用场景
ImageAssets 最主要的使用场景就是 icon 类的图片, 一般 icon 类的图片大小在 3kb 到 20 kb 不等, 都是一些小文件.> 

2. 直接拖拽到工程

如果是纯代码,图片名需要手动添加@2x,@3x等倍数标识,且需要指明后缀.png,.jpg;IB添加图片的话只需要指明后缀就好,不用添加倍数标识。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190308170211780.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1oxNTkxMDkw,size_16,color_FFFFFF,t_70)
1.Resource 的使用方式
将文件直接拖入到工程目录下, 并告诉Xcode打包项目时候把这些图片文件打包进去. 这样在应用的".app"文件夹中就有这些图片. 在项目中, 读取这些图片可以通过以下方式来获取图片文件并封装成UIImge对象:
NSString *path = [NSBundle.mainBundle pathForResource:@"image@2x" type:@"png"];UIImage *image = [UIImage imageWithContentsOfFile:path];>
2. Resource 的特性
在 Resource 的图片管理方式中, 所有的图片创建都是通过读取文件数据得到的, 读取一次文件数据就会产生一次NSData以及产生一个UIImage, 当图片创建好后销毁对应的NSData, 当UIImage的引用计数器变为0的时候自动销毁UIImage. 这样的话就可以保证图片不会长期地存在在内存中.> 
3. Resource 的常用情景
由于这种方法的特性, 所以 Resource 的方法一般用在图片数据很大, 图片一般不需要多次使用的情况. 比如说引导页背景(图片全屏, 有时候运行APP会显示, 有时候根本就用不到).> 
4. Resource 的优点图片的生命周期可以得到管理无疑是 Resource 最大的优点, 当我们需要图片的时候就创建一个, 当我们不需要这个图片的时候就让他销毁. 图片不会长期的保存在内存当中, 所以不会有很多的内存浪费. 同时, 大图一般不会长期使用, 而且大图占用内存一般比小图多了好多倍, 所以在减少大图的内存占用中, Resource 做的非常好.> 

关于imageNamed与imageWithContentsOfFile详解

3. 把图片资源打包成bundle文件(资源猫)

1.Bundle 文件,简单理解,就是资源文件包。我们将许多图片、XIB、文本文件组织在一      起,打包成一个 Bundle 文件。方便在其他项目中引用包内的资源。> 
2.Bundle 文件是静态的,也就是说,我们包含到包中的资源文件作为一个资源包是不参       加项目编译的。bundle 包中不能包含可执行的文件。它仅仅是作为资         源,被解析成为特定的二进制数据。> 
3.优势:
1.为了方便管理资源文件,可以使用bundle的方式来进行管理
2.使用频率低的可以建立一个bundle存放图片,使用imageWithContentsOfFile加载.> 
4.使用
// bundle path
#define STBundle_Name @"SafeToolResource.bundle"
#define STBundle_Path [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:STBundle_Name]
#define STBundle [NSBundle bundleWithPath:STBundle_Path]+ (UIImage *)getSafeToolSMSBackgroundImage
{NSString *imageName = @"cmbcSafeTool_sms.png";if ([UIDevice is4Point7inchScreenOr5Point8inchScreen_cmbc]) {imageName = @"cmbcSafeTool_sms_4.7.png";}//    return [UIImage imageNamed:imageName];return [UIImage imageNamed:imageNameinBundle:STBundlecompatibleWithTraitCollection:nil];
}

bundle 文件制作详解请看:

4. 沙盒文件目录下

沙盒文件下的图片初次一般是使用预处理复制的,之后图片可以从服务器那来进行更新沙盒图片的文件。

  1. 预处理把图片复制
    把需要预处理的图片,打包放在zip文件里面,把zip文件放入工程,把图片存在沙盒里面
  2. 查找图片
    现从沙盒文件查找->再从bundl查找->最后从主bundle查找。

图片资源管理demo

ios 图片资源管理的四种方式(Assets,bundle文件,Resource,沙盒文件目录下)相关推荐

  1. java aio复制文件_java复制文件的4种方式及拷贝文件到另一个目录下的实例代码...

    尽管Java提供了一个可以处理文件的IO操作类. 但是没有一个复制文件的方法. 复制文件是一个重要的操作,当你的程序必须处理很多文件相关的时候. 然而有几种方法可以进行Java文件复制操作,下面列举出 ...

  2. iOS中对图片拉伸的四种方式

    1. UIImageView整体拉伸 方式一是通过设置容器UIImageView中图片的显示模式:UIImageView-contentMode,使容器内的图片按照需要的拉伸方式在容器中显示. typ ...

  3. php图片背景平铺,css如何让背景图片平铺?css背景图片平铺四种方式介绍

    在网页设计的过程中,有时候可能会要求背景图片平铺,因为这样会让整个网页看起来比较好看,图片平铺可以不用具体设置body宽度和高度大小,就可以直接将图片平铺整个页面,那么,如何让背景图片平铺呢?接下来本 ...

  4. php如何平铺背景图片,css如何让背景图片平铺?css背景图片平铺四种方式介绍

    在网页设计的过程中,有时候可能会要求背景图片平铺,因为这样会让整个网页看起来比较好看,图片平铺可以不用具体设置body宽度和高度大小,就可以直接将图片平铺整个页面,那么,如何让背景图片平铺呢?接下来本 ...

  5. css 背景平铺 控制范围,css如何让背景图片平铺?css背景图片平铺四种方式介绍...

    在网页设计的过程中,有时候可能会要求背景图片平铺,因为这样会让整个网页看起来比较好看,图片平铺可以不用具体设置body宽度和高度大小,就可以直接将图片平铺整个页面,那么,如何让背景图片平铺呢?接下来本 ...

  6. css如何让背景图片平铺?css背景图片平铺四种方式介绍-前端教程

    在网页设计的过程中,有时候可能会要求背景图片平铺,因为这样会让整个网页看起来比较好看,图片平铺可以不用具体设置body宽度和高度大小,就可以直接将图片平铺整个页面,那么,如何让背景图片平铺呢?接下来本 ...

  7. css如何让背景图片平铺?css背景图片平铺四种方式介绍

    在网页设计的过程中,有时候可能会要求背景图片平铺,因为这样会让整个网页看起来比较好看,图片平铺可以不用具体设置body宽度和高度大小,就可以直接将图片平铺整个页面,那么,如何让背景图片平铺呢?接下来本 ...

  8. ios app安装的四种方式

    第一种,用户直接通过App Store下载安装 苹果官方通过非对称加密生成一对公私钥,在iOS设备内置了一个公钥,在苹果后台保存了对应的私钥,在开发者把app上传到App Store时,苹果用私钥对这 ...

  9. java复制文件的4种方式及拷贝文件到另一个目录下与删除单个文件和删除整个文件夹

    文章目录 1.使用FileStreams复制 2.使用FileChannel复制 3.使用Commons IO复制 4.使用Java7的Files类复制 5.下面看下java拷贝文件到另一个目录下的实 ...

最新文章

  1. 计算机视觉(AI)的算法有哪些,具体都有哪些特点?
  2. JDK安装以及开发环境搭建
  3. 文字转语音,语音转语音,实际的转化过程
  4. Linux下用来获取各种系统信息的C++类
  5. android10 内部存储,Android的内部存储和外部存储
  6. 【NOIP模拟】方格稿纸
  7. linux ls in*,35 ls Command Examples in Linux (The Complete Guide)
  8. 什么是UML?分哪两类?
  9. POJ 1365 Prime Land
  10. 微机原理与接口技术实验
  11. 50页PPT,让你全面了解物联网产业链及发展趋势 | 附下载
  12. 【数据库 · MySQL】听韩顺平老师课草稿
  13. 团队作业1--团队展示
  14. 电路-电源模块汇总(充电器)
  15. java实现单链表的建立(头插法和尾插法)
  16. win10 vs2017 community 新版 systemc
  17. 【Linux】软件包管理器yum和编辑器vim(内附动图)
  18. linux dmidecode命令,Linux使用dmidecode命令查看内存型号
  19. CE认证RED指令测试项及测试内容(智能开关)
  20. C#:魔术师发牌-解法思路

热门文章

  1. Redis command timed out 两种异常情况
  2. ITSS认证是什么认证
  3. 小米3 android8,小米8 Miui10.3 最新稳定版(10.3.6.0 Android 9.0)稳定版 快过闪电 AI加持 高级工具箱 黑域 精简 流畅 省电 实用...
  4. API网关Kong(三):功能梳理和插件使用-基本使用过程
  5. PCB设计中常见的八个问题及解决方法
  6. 【Python】_1.Python基础语法
  7. Linux 脚本大师不是人人都可以达到的,但Shell编程基础还是有必要掌握的
  8. java 当前时间_Java 获取当前时间的小时(24小时制)
  9. 大部分公司可在两天内被渗透攻击
  10. VC/MFC 编程技巧大总结