美文网首页
加载本地图片的几种方式和区别

加载本地图片的几种方式和区别

作者: MrDarren | 来源:发表于2017-05-10 22:09 被阅读0次

加载本地图片在iOS开发中是非常常见的,一般来说,加载本地图片主要有以下两种方法,分为两大类。

一、加载mainBundle的图片

1、imageNamed

这个方法用一个指定的名字在系统缓存中查找一个图片对象,如果存在就返回一个图片对象。如果缓存中没有找到相应的图片,就从指定的文档中加载然后缓存并返回这个对象。

因此imageNamed的优点是当加载时会缓存图片。所以当图片会频繁的使用时,那么用imageNamed的方法会比较好。

例如需要在一个TableView里的TableViewCell里都加载同样一个图标,那么用imageNamed加载图像效率很高。系统会把那个图标Cache到内存,在TableViewCell里每次利用那个图像的时候,只会把图片指针指向同一块内存。

正是因此使用imageNamed会缓存图片,即将图片的数据放在内存中,iOS的内存非常珍贵并且在内存消耗过大时,会强制释放内存,即会遇到memory warnings。而在iOS系统里面释放图像的内存是一件比较麻烦的事情,有可能会造成内存泄漏。

例如当一个UIView对象的animationImages是一个装有UIImage对象动态数组NSMutableArray,并进行逐帧动画。当使用imageNamed的方式加载图像到一个动态数组NSMutableArray,这将会很有可能造成内存泄露。

另外,如果加载的是png格式的图片,则可以省略.png后缀。

2 、imageWithContentsOfFile

这个方法仅加载图片,图像数据不会缓存。

因此对于较大的图片以及使用情况较少时,那就可以用该方法,降低内存消耗。

一般是结合[[NSBundle mainBundle] pathForResource: ofType:];这个方法一起使用。

但是使用[[NSBundle mainBundle] pathForResource: ofType:]这个方法的时候需要注意一点: Assets.xcassets里面的图片,不管是jpg还是png都不能用[[NSBundle mainBundle] pathForResource: ofType:]获取,只能用[UIImage imageNamed:]获取。

而在工程目录下的图片,既可以用[[NSBundle mainBundle] pathForResource: ofType:]获取,也能用[UIImage imageNamed:]获取。

二、加载customBundle的图片

这里得分两种情况,一种是真实的bundle(创建的后缀为.bundle的文件),另一种是framework(创建的后缀为.framework的文件)

ps:其实framework也是一种bundle,所以一开始我也是按照从custom bundle里获取图片的方面从framework获取图片,但是却发现一直获取不到,最后才发现,两者是有一些区别的,具体区别请看下面分析

1、主工程中加载custombundle里的图片

在这之前,顺便简单说下自custom bundle的创建

在工程里command + n,再按图示操作

往Resources.bundle添加加图片,直接将图片拖拽到目录下,然后按下图方式加载图片

2、主工程中加载customframework里的图片

在这之前,顺便简单说下自custom framework的创建

按下图操作

注意,创建好framework后,如果想访问里面的资源,需要先将framework加载起来,按下图操作

另外,如果想访问framework里其他资源,比如里面的UIViewController,需执行下面操作

接下来就是加载customFramework里面的图片,有以下两种方式

3、customframework中加载customframework里的图片

有以下几种方法

总结:

1、imageNamed加载图片时会在内存中缓存图片,适用于

1)、主工程中加载mainBundle的图片

2)、主工程中加载Assets.xcassets的图片

3)、custom Framework中加载custom Framework的图片

2、imageWithContentsOfFile加载图片时不会在内存中缓存图片,一般跟[bundlepathForResource:ofType:]一起使用,适用于

1)、主工程中加载mainBundle的图片

2)、主工程中加载custom Framework的图片

3)、 custom Framework中加载custom Framework的图片

相关文章

  • flutter 图片

    加载网络图片网络图片 加载本地图片效果 实现图片圆角的几种方式 CircleAvatarCircleAvatar ...

  • React Native组件学习之Image

    Demo展示 上面是去加载网络图片,下面是加载本地图片 加载图片的几种方式 加载本地图片从项目中加载图片(一般是会...

  • 加载本地图片的几种方式和区别

    加载本地图片在iOS开发中是非常常见的,一般来说,加载本地图片主要有以下两种方法,分为两大类。 一、加载mainB...

  • iOS 适配iphone和ipad图片的几种方式

    iOS 适配iphone和ipad图片的几种方式 适配实现的三种方式: 图片命名方式,系统来区别加载(建议这个方式...

  • iOS之图片加载

    iOS加载本地图片有两种方式:imageName和imageWithContentOfFile 区别 缓存:ima...

  • iOS 几种图片或Gif异步加载

    iOS 加载加载图片的方式主流的有两种(本地图片略过):1、SDWebImage。2、YYWebImage。 区别...

  • 加载本地html5的几种方式

    加载本地html5的几种方式

  • Flutter Image组件详解

    加载图片的组件 加载图片的几种方式 加载网络图Image.network('path')NetworkImage(...

  • UIImage的缓存(内存管理)

    两种方式加载本地图片 通过imageNamed:方法加载图片 用过这种方式加载图片,一旦图片加载到内存中,那么就不...

  • 微信小程序-image(图片)

    在微信小程序中,要显示一张图片,有两种图片加载方式: 加载本地图片 加载网络图片 加载本地图片 加载网络图片 微信...

网友评论

      本文标题:加载本地图片的几种方式和区别

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