iOS 资源管理

作者: osbornZ | 来源:发表于2017-04-13 15:07 被阅读214次

资源管理包含:文本文件,FrameWork ,Bundle,Resource...
而Images.scassets 是我们经常使用的资源管理文件,它是Xcode 5之后的一个图片资源管理文件;之前我们App 的iCON,LaunchImage等需要配置不同的Size 和 名称系统才能找到对应关系的资源;

主要来谈下对于我们加载资源两种方式:

  • Resource (直接拖进项目,可以在.ipa下看到的资源)
  • Images.scassets

图片格式

对于iOS本地应用程序来说使用PNG,重要事情说三遍: 为什么 为什么 为什么

官方表示当iOS应用构建的时候,Xcode会通过一种方式优化.png文件而不会优化其它文件格式。具体优化了什么呢 ?

iPhone的vRAM在存放单个像素的颜色的时候,并不是按照传统的“红-绿-蓝”这样的顺序排列的,而是“蓝-绿-红”,即我们常说的RGB,在iPhone的显存里是BGR,无Alpha通道;

Xcode在编译时,会对png资源进行优化,把png里RGB转成BGR,所有的alpha通道先和RGB三通道先乘好(比如R:1 G:1 B:1 A:0.5的颜色直接转成 R:0.5 G:0.5 B:0.5)最后进行渲染;

PNG

- 1.同个分辨率的图片,保存为png要比jpg大;
- 2.png图片有alpha通道,因此它支持图片透明,而jpg不支持透明;
- 3.xcode会对png格式进行特殊的优化处理,而对于其他图片不做处理

JPG

- 1: 高压缩率
- 2: 适合扫描使用

存储及注意事项

Images.xcassets 文件打包后会压缩在Assets.car文件下,一般通过 imageName 的方式加载,会缓存资源文件;
可以通过 Slicing 设置拉伸效果(聊天气泡,不同长度多语言文案资源扩展)

Resource 放在项目里的下载ipa解压缩就可以直接获取, mainBundle 查找项目目录下文件;

众所周知的缓存加载问题: imageNamed 和 imageWithContentsOfFile ;

在.car中的图片是不能通过imageWithContentsOfFile:来加载;
imageName:加载的图片要么是Assets.car中的图片,要么是资源包(mainBundle)中直接存放的图片。

如果用imageNamed:从Images.xcassets以外的地方加载图片,必须在文件名后加扩展名;

自定义 bundle 问题 (独立模块和公共组件类 资源整合)

 NSBundle *adSupportBundle = [NSBundlebundleWithPath:@"/Your  BundlePath"];
[adSupportBundle load];

About Bundles

内存问题

Q: 通过[UIImage imageNamed:]生成的对象什么时候被释放 ?

A: 加载文件名称,首次展示时候会进行文件读取和解码,同时保存一份全局缓存,内部实现相当于字典(key:value),App 第一次退到后台和收到内存警告时,该图片的缓存才会被清空,其他情况下缓存会一直存在。

而 Resource方式 (指直接拖进项目中在 .ipa根目录下或者沙盒中),图片创建通过读取文件数据加载,产生NSData 和 UIImage,之后销毁Data,UIImage引用计数为 0 后,也同样销毁;(类 imageWithContentsOfFile 不缓存逻辑,不频繁使用的大图资源加载方式)

App 内存优化

缩包优化

 <1>  资源文件过大, 根本问题减少资源的使用,能用代码方案实现则替换; 当然前提也是满足产品设计的要求;(如:圆角,阴影,灰度处理等)
 <2>  对于资源文件进行压缩处理,工具有很多,压缩比例客观; (imageOptim *非广告*)

资源缩包问题有想法和实践的同学,欢迎留言沟通交流~~~

相关文章

  • iOS组件化 03 - xib和Storyboard的使用

    往期回顾 iOS组件化 01 - 本地私有库的使用iOS组件化 02 - 组件中图片资源管理方案优化 1. 使用...

  • iOS 资源管理

    资源管理包含:文本文件,FrameWork ,Bundle,Resource...而Images.scassets...

  • iOS bundle资源管理

    我们下载的很多demo 里面的资源文件都是放在bundle文件里,要怎么创建使用bundle文件呢。这边又两种方法...

  • iOS项目资源管理

    APP瘦身一个重要方式是删除冗余内容,包括类文件,图片等 Apple 为了在优化 iPhone 设备读取 png ...

  • 开发期资源管理的策略选择

    1)开发期资源管理的策略选择​2)iOS14启动就Crash3)IL2CPP加密:global-metadata....

  • iOS组件化-资源管理

    在组件化前期的工作中,我们会面临如何管理图片、音视频等资源的问题。我们需要关注的问题是如何将相应的资源和组件一起打...

  • iOS组件化-资源管理

    这篇文章写的很好,借用一下,方便之后查阅。https://www.it610.com/article/128262...

  • iOS组件化-资源管理

    资源管理: https://www.it610.com/article/1282629829128110080.h...

  • ERP管理系统:物资管理模块操作简略说明

    ERP即企业资源计划:是针对物资资源管理(物流)、人力资源管理(人流)、财务资源管理(财流)、信息资源管理(信息流...

  • RunLoop

    1.含义:个人觉得的定义是线程资源管理器;合理分配资源,启动,干活,休息;(在IOS中,开启线程是很消耗性能的,开...

网友评论

    本文标题:iOS 资源管理

    本文链接:https://www.haomeiwen.com/subject/qtvbattx.html