iOS图片资源是放在Images.xcassets还是放在单独的文件夹?

前言

在上家公司离职的时候,新伙计来接手我的工作,在给他讲项目的时候,发现我项目中的图片资源都是放在单独的文件夹里面的,然后他就问了我一个问题:为什么你的图片资源不放在Images.xcassets里?

问题来了,为什么一定要放在Images.xcassets里面?而不能放在单独的文件夹里面?放在Images.xcassets里面和放在单独的文件夹里面有什么区别?


查了资料后,可知:
放在Images.xcassets里面的图片:

  1. 只支持png格式的图片
  2. 图片只支持[UIImage imageNamed:]的方式实例化,但是不能从Bundle中加载。(使用[NSBundle MainBundle] pathForResources 拿不到 images.xcassets里面图片的路径)
  3. Images.xcassets中的所有文件会被打包为Assets.car的文件,并且图片会被压缩,从而使包的体积变小

放在单独文件夹的图片:

  1. 可以使用[UIImage imageNamed:]加载,也可以使用imageWithContentOfFile:方法加载

这又出现一个问题,[UIImage imageNamed:]加载图片,与imageWithContentOfFile:加载图片有什么区别?

使用imageName:加载图片

  1. 加载到内存当中会一直存在内存当中,(图片)不会随着对象的销毁而销毁。
  2. 加载进去图片后,占用的内存归系统管理,我们是无法管理的。
  3. 相同的图片是不会重复加载的
  4. 加载到内存中占据的内存较大

使用imageWithContentOfFile:加载图片

  1. 加载到内存中占据的内存较小
  2. 相同的图片会被重复加载到内存当中
  3. 加载的图片会随着对象的销毁而销毁

总结:

放在Images.xcassets里面的图片可以被压缩.car文件,减小app包的体积
但是不能使用路径来加载图片,只能使用[UIIimage imageName:]加载图片

而imageName:这个方法加载图片,会在内存中一直存在,什么时候销毁不受管理员控制,因此适用于加载频繁的小图片
而放在文件夹的图片,可以使用imageWithContentOfFile:方法加载,该方法的好处是内存随着对象的销毁而销毁,因此适用于大图片、频率低的图片

小图片 或者 使用频率比较高的图片,可以直接放在Images.xcassets或者单独文件夹,使用[UIIimage imageName:]方法加载图片
大图片、使用频率低的图片可以放在单独文件夹,使用imageWithContentOfFile:方法加载

其实,大多数情况下,都是直接使用[UIImage imageNamed:]这种加载本地图片,既然是使用这种方法,那么图片放在Images.xcassets里面和放在单独文件夹里面区别不是很大,最大的区别就是Images.xcassets在打包的时候会减小包的体积。


参考

http://www.voidcn.com/article/p-awgvdtyd-bqn.html
https://cloud.tencent.com/developer/article/1337990
https://cloud.tencent.com/developer/article/1337991?from=article.detail.1337990

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值