手机版
网站地图
美文美图
最新动态
你好,欢迎访问
好美文阅读网
个性皮肤
搜索
网站首页
美文
文章
散文
日记
诗歌
小说
故事
句子
作文
签名
祝福语
情书
范文
读后感
文学百科
美文摘抄
节日文章
名家散文
网名大全
座右铭
口号大全
面试技巧
说说大全
阅读答案
诗词默写
流言蜚语
节日祝福
好句子
经典台词
谚语大全
亲情故事
友情故事
表白情书
工作报告
活动总结
心得体会
专题汇总
美文网首页
加载本地图片的几种方式和区别
加载本地图片的几种方式和区别
作者:
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的图片
相关文章
网友评论
本文标题:
加载本地图片的几种方式和区别
本文链接:
https://www.haomeiwen.com/subject/xeqntxtx.html
延伸阅读
那年盛夏诗歌
环境监察队工作总结范文
优秀教师学习心得范文
华胥引的读后感300字
《Its red》教学反思范文
农资购销的合同范本
竞选中队委优秀演讲稿
辞金蹈海的成语解释
《世纪宝鼎》公开课教案设计
因为爱你,所以牵挂
今生今世红尘醉——美到
一个90后的内心独白
致已逝去的高中年华
深度阅读
您也可以注册成为美文阅读网的作者,发表您的原创作品、分享您的心情!
情人节
母亲节
重阳节
清明节
端午节
植树节
元宵节
妇女节
愚人节
圣诞节
父亲节
教师节
儿童节
劳动节
青年节
建军节
万圣节
平安夜
光棍节
中秋节
国庆节
感恩节
腊八节
更多话题
栏目导航
摄影
故事
互联网
读书
旅行
热点阅读
晴天雨天
你的世界
心灵 | 愿世间不再有房思琪
手机摄影记【1】:不开心?尝试摄影治愈
2017.5.10
能身体好,就是最好的才华
思维导图2—5月生命之花
《元素的盛宴》---书摘
如何让四岁小孩学会围棋? -----围棋的“气”
感谢你的残忍,让我的心灵重获阳光
网友评论