UIImage加载图片的方式以及Images.xcassets对于加载方法的影响

图片缓存

根据是否将创建好的对象缓存入系统内存,有两类创建UIImage对象的方法可选:

  • 缓存:+ imageNamed:,只需传入文件名.扩展名(可选)即可。
  • 不缓存:+ imageWithContentsOfFile:,必须传入文件的全名(全路径+文件名)。

注意,对于有缓存功能的方法来说,其创建对象的步骤如下:

  1. 根据图片文件名在缓存池中查找特定的UIImage对象,若存在这个对象,将此对象返回。
  2. 如果不存在这个对象,则从mainBundle中加载图片数据,创建对象并返回。
  3. 如果相应的图片数据不存在,返回nil。

Images.xcassets

Images.xcassets在app打包后,以Assets.car文件的形式出现在bundle中。其作用在于:

  • 自动识别@2x,@3x图片,对内容相同但分辨率不同的图片统一管理。
  • 可以对图片进行剪裁和拉伸处理。

UIImage从bundle中加载图片资源

注意

  • Images.xcassets中的图片资源只能通过imageNamed:方法加载,通过NSBundle的pathForResource:ofType:无法获得图片路径。因此,Images.xcassets只适合存放系统常用的,占用内存小的图片资源。
  • imageNamed:方法同样可以加载根目录中的图片资源。
  • 要想利用imageWithContentsOfFile:方法以不缓存的形式加载图片,必须将图片资源放置在根目录中。
  • 相对于jpg,iOS对png的支持较好,例如,如果从Images.xcassets以外的地方加载图片,必须在文件名后加扩展名,例如:
// pic.jpg处于根目录下
[UIImage imageNamed:@"pic"]; // 错误,图片未能正确加载
[UIImage imageNamed:@"pic.jpg"]; // 正确

时间: 2024-10-02 14:25:50

UIImage加载图片的方式以及Images.xcassets对于加载方法的影响的相关文章

iOS疯狂详解之imageIO完成渐进加载图片

一.常见渐进加载图片模式 目前我们看到的渐进加载主要有以下三种实现方式: 1) 依次从web上加载不同尺寸的图片,从小到大.最开始先拉取一个小缩略图做拉伸显示,然后拉取中等规格的图,拉取完毕直接覆盖显示,最后拉取原图,拉取完成后显示原图. 2)直接从web上拉取最大的图片,每接受一点儿数据就显示一点儿图片,这样就会实现从上到下一点点刷新出来的效果. 3)结合第1种和第2种,先拉取一个缩略图做拉伸显示,然后采用第二种方法直接拉取原图,这样即可以实现渐进加载,也可以节省几次中间的网络请求. 今天我们

Android-异步加载图片

刚刚复习了之前学的异步加载图片,于是决定写下来,增强记忆 想要加载图片,必须获得所有图片的URL地址.这里图片的URL地址存在了List数组. 异步加载图片有两种方式(我这里使用两种方式):1.自己开线程来加载图片,然后使用Handler来更新UI:2.使用AsyncTask来加载图片. 1.使用子线程来加载图片. 1 private Handler handler = new Handler() 2 { 3 @Override 4 public void handleMessage(Messa

【第二篇】Volley的使用之加载图片

Volley加载图片有两种方式: 1,ImageRequest 来对网络图片进行请求,放入请求队列,获取后现在在控件上面. 2,NetworkImageView 最为自定义控件来自动加载网络图片. 3,imageloader,对图片大小,质量格式控制来按需加载图片.下面分别举例子说明使用: ImageRequest的使用来加载图片: 首先设计界面,是个Gridview来加载图片:activity_main.xml <RelativeLayout xmlns:android="http://

解决imageView加载图片时候造成内存溢出的问题

图片加载  出现内存溢出的问题很普遍  而且解决的方法五花八门 各有优劣 主要是因为  imageView  在底层创建图片层的时候 会占用很大的内存空间 尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource直接使用图片路径来设置一张大图,因为这些函数在完成decode后,最终都是通过java层的createBitmap来完成的,需要消耗更多内存.改用先通过BitmapFactory.decodeStream方法,创

SDWebImage动画加载图片处理方案

问题 做过开发的都知道,有时候为了让在tableView上面加载的图片显示不突兀,我们需要做渐变动画将它们加载出来,虽然用SDWebImage可以实现从网络加载图片,但是,它没有帮你实现动画加载图片,本教程就是教你实现动画加载图片的处理方案(你也可以用这种方法来进行其他动画的设计,本人只在这里进行抛砖引玉). 效果 源码 https://github.com/YouXianMing/SDWebImageLoadImageAnimation 设计的细节 核心的地方 要用专门的model记录图片是否

网页图片很多时,加载完后再加载图片(defer:延迟加载)

图片影响页面加载速度,可以先加载完页面,再去加载图片. defer:告诉浏览器,这里面的js代码不影响网页脚本解析,可以解析完html脚本再执行这段js代码(个人理解). 网页代码:<img src="grey.gif" data-original="img/53a1820f5866c.png"/> Js代码: <script defer="defer" type="text/javascript" >

用GCD的方式,加载网络图片(主线程加载图片+类扩展方式)

用GCD的方式,加载网络图片(主线程加载图片+类扩展方式) 用两种方法来实现网络加载图片 方法1:实现的效果:先加载背景色灰色,两秒后加载图片 - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor=[UIColor grayColor]; //刷新UI(在主线程中刷新UI!!!) --- 一般方法 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PR

002-UIImageView和UIButton对比 UIImageView的帧动画 格式符补充 加载图片两种方式 添加删除SUBVIEW

一>.UIImageView和UIButton对比 显示图片 1> UIImageView只是一种图片(图片默认会填充整个UIImageView)  image\setImage: 2> UIButton能显示2种图片 * 背景 (背景会填充整个UIButton)  setBackgroundImage:forState: * 前置(覆盖在背景上面的图片,按照之前的尺寸显示)  setImage:forState: * 还能显示文字 点击事件 1> UIImageView默认是不能

UIImage加载图片的区别

前言 关于本地图片UIImage的加载问题,还是需要注意的.不同的加载处理方式,在效率和性能上还是有差异的. 今天,我们来讲讲UIImage的加载应该选择什么样的API来加载! 两种API 这两种API分别是: -imageNamed: 默认加载图片成功后会内存中缓存图片,这个方法用一个指定的名字在系统缓存中查找并返回一个图片对象.如果缓存中没有找到相应的图片对象,则从指定地方加载图片然后缓存对象并返回这个图片对象.通常是加载bundle中的图片资源! -initWithContentsOfFi