问题描述

图片资源放在Assets.xcassets中,分别用UIImage的类方法imageNamed和imageWithContentsOfFile获取图片对象,但发生奇怪的情况,前者获取到图片对象,后者结果为nil。代码如下:

1.通过UIImage的类方法imageNamed:可以获取到图片对象。

UIImage *imge = [UIImage imageNamed:@"test.jpg"];

2.但通过UIImage的类方法imageWithContentsOfFile:得到img为nil

//NSString *path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"jpg"];
NSString *path = [[NSBundle mainBundle] pathForResource:@"test.jpg" ofType:nil];
UIImage *imge = [UIImage imageWithContentsOfFile:path];

问题分析

其实,UIImage创建对象有两种方法:

  • imageNamed:创建的对象会缓存到系统内存中,不会立即释放到内存。好处是再次加载使用这种方式会减少读取操作,加快程序运行。缺点:加载过多图片会占用大量内存空间。

    1. 创建图片对象,首先在缓存中查找是否有该对象,有则直接取出对象,
    2. 没有则从bundle中查找图片资源,有则创建对象并返回。
    3. bundle中也没有图片资源,则返回nil。
  • imageWithContentsOfFile:mageWithContentsOfFile创建的对象不会缓存到系统内存中。好处是不产生缓存。缺点:对于经常使用的小图片,会频繁读取。

imageNamed只需传文件名,imageWithContentsOfFile需要传入文件全路径,而文件全路径可以通过NSBundle得到。

注意:

如果在项目中的Assets.xcassets(蓝色文件夹

  • 不可以NSBundle获得资源路径,然后imageWithContentsOfFile加载
  • 可以imageNamed加载

如果在项目中真实文件夹(蓝色文件夹,除Assets.xcassets):

  • 可以NSBundle获得资源路径,然后imageWithContentsOfFile加载。注意要带文件夹路径,例如[[NSBundle mainBundle]pathForResource:@"test.jpg" ofType:nil inDirectory:@"image"]
  • 不可以imageNamed加载

如果在项目中虚拟文件夹(黄色文件夹):

  • 可以NSBundle获得资源路径,然后imageWithContentsOfFile加载
  • 可以imageNamed加载

问题解决

     只能imageNamed获取Assets.xcassets的图片资源

转载于:https://www.cnblogs.com/Zev_Fung/p/5407642.html

imageNamed和imageWithContentsOfFile-无法加载图片的问题相关推荐

  1. iOS关于加载图片的几种方式选择

    最近在开发过程中遇到一些性能优化的东西,这次来说说关于图片加载的性能优化和选择. 大家都知道创建UIImage常用以下几种方式 + (nullable UIImage *)imageNamed:(NS ...

  2. 用imageNamed加载图片产生的问题

    通常我们会用imageNamed:来加载图片,但是用这个API有个问题,就是它会缓存加载的image. 因此,对于那些被重用的图片,这个API很高效.但是对于那些使用很少的图片,用这个就很耗内存,那怎 ...

  3. IOS中UITableView异步加载图片的实现

    本文转载至 http://blog.csdn.net/enuola/article/details/8639404  最近做一个项目,需要用到UITableView异步加载图片的例子,看到网上有一个E ...

  4. UI小项目之拳皇动画的实现(抽取加载图片和播放音乐的方法)

    实现思路 1.加载图片 2.播放音乐 实现思想 1.封装思想 抽取相同代码生成一个新的方法,通过传递参数调用该方法: 2.内存管理思想 不需要每次调用方法时都重新加载图片,for循环加载图片写在Vie ...

  5. iosxib 设置图片_修改xib 默认加载图片的路径

    问题描述:项目组件化重构的时候,主工程的中xib 中引用了图片(图片是放在子工程中),但是不能显示. 问题原因:主工程Xib 加载的图片访问默认的是 main Bundle 中的资源,图片是子工程的F ...

  6. 模仿SDWebImage实现异步加载图片

    模仿SDWebImage实现异步加载图片 SDWebImage想必大家都不陌生吧,要实现它的图片异步加载功能这个还是很简单的. 注意:此处我只实现了异步加载图片,并没有将文件缓存到本地的打算哦:) 源 ...

  7. iOS网络加载图片缓存策略之ASIDownloadCache缓存优化

    iOS网络加载图片缓存策略之ASIDownloadCache缓存优化 在我们实际工程中,很多情况需要从网络上加载图片,然后将图片在imageview中显示出来,但每次都要从网络上请求,会严重影响用户体 ...

  8. ios加载本地html懒加载图片方案,IOS开发中加载大量网络图片优化方法

    IOS开发中加载大量网络图片如何优化 1.概述 在IOS下通过URL读一张网络图片并不像其他编程语言那样可以直接把图片路径放到图片路径的位置就ok,而是需要我们通过一段类似流的方式去加载网络图片,接着 ...

  9. ios html异步加载图片,iOS 异步加载本地图片

    iOS 异步加载本地图片 问题 当某个界面使用系统API + (nullable UIImage *)imageNamed:(NSString *)name;加载了过多本地图片资源时,不可避免的会产生 ...

最新文章

  1. 打开黑色_表哥出差带回来一箱苹果,打开后发现是黑色的,大家表示都没见过...
  2. Hyper-V第1代虚拟机和第2代虚拟机特性对照表
  3. 帝国CMS模板|中国历史网整站数据MIP源码下载、带Tags提取插件
  4. 剑指offer之数据流中的中位数
  5. 手机按三角返回页面上一页_小猿圈微信小程序跳转页面都有哪些?
  6. 一个简单的微服务项目带你上手spring cloud 全家桶
  7. JSK-61 二进制加法【大数】
  8. Windows下杀进程的命令
  9. ES6 模板字符串方法
  10. 单例(Singleton)设计模式
  11. minigui学习笔记五
  12. 美团配送 二面(40min) Java后端 暑期实习面经
  13. Adobe系列软件大全
  14. ACS 2017中国汽车CIO峰会10月强势登陆上海
  15. 智科某课小论文:当今世界计算机硬件与软件发展现状
  16. 零基础开发--歌曲管理系统
  17. KNN算法和sklearn中的KNN算法
  18. SXOI2018 游记
  19. js 获取上下文后面的路径_通过在数据后面显示上下文来可视化公众意见
  20. oracle笔记:新手上路必备。花了两天时间整理出来的,详细的不能再详细了。

热门文章

  1. Serv-U搭建FTP服务器
  2. android学习日记12--布局管理器
  3. VB6 无法加载ieframe.dll,导致不能使用 浏览器控件--(转载)
  4. c#中用声音提示报警(转)
  5. instanceof 的运用
  6. Visual Studio 2017新版发布,极大提高开发效率丨附下载 1
  7. Create Volume 操作(Part I) - 每天5分钟玩转 OpenStack(50)
  8. Linux使用技巧15则
  9. Dynamipsgui入门教程
  10. 2020-3-20前端题目