今天 又学习了 一个 提高应用交互效率 降低内存的 小知识

结论:

(1)mageNamed加载图片,并且把image缓存到内存里面,

(2)imageWithContentsOfFile是只显示图片,但不加到内存中。

1 .通常 我们都是把 切图放在Images.xcassets 里面  然后 用  [UIImage  imageNamed:@"XXX"] 来获取

过程:

加载图片 首先app  先会查系统缓存,如果没有 会遍历整个工程文件找到这个文件进行系统缓存,以备下次使用 并返回这个图片 没有这个图片 返回nil (而缓存何时释放 有系统决定)

这种方式适合 常用切图,(还有比如:UITableViewCell , UICollectionCell 等频繁加载同一个图标) 如果是有很多图片 图片又很大 会出现 "内存不足,内存泄露,甚至是程序的崩溃"

2 .对于大图片 比如 像引导页 那种 占了 几乎满屏的图  并且复用率很低  比较适合 imageWithContentsOfFile 方式

代码:

  1. //全局宏 : 可以在 pch 文件中定义一个宏,在整个项目中使用
  2. #define ResourcePath(path) [[NSBundle mainBundle] pathForResource:path ofType:nil]
  3. #define ImageWithPath(path) [UIImage imageWithContentsOfFile:path]
  4. 调用
  5. UIImage* image = ImageWithPath(ResourcePath(@"img.jpg"));//需要写出.png/.jpg

过程:

这个方法仅仅是加载这个图片 不会缓存.(每次都这样)

但是 使用这个方法去获取图片 应该放在 工程的"组"(group)里面  因为 ResourcePath 获取到资源文件路径,如果是"文件"(folder) 需要把这个folder的路径也添加上.

其他:

  1. 参考链接:
    http://my.oschina.net/u/2458687/blog/515161
    相关:
  2.  
  3. 1.Images.xcassets中的素材
  4.  
  5. 1)只支持png格式的图片
  6.  
  7. 2 图片只支持[UIImage imageNamed]的方式实例化,但是不能从Bundle中加载
  8.  
  9. 3 在编译时,Images.xcassets中的所有文件会被打包为Assets.car的文件
  10.  
  11. 2.UIImage imageNamed
  12.  
  13. 1)在图片使用完成后,不会直接被释放掉,具体释放时间由系统决定,适用于图片小,常用的图像处理
  14.  
  15. 2)如果要释放快速释放图片,可以使用[UIImage imageWithContentsOfFile:path]实例化图像
  16.  
  17. 3.Bundle(包)中的图片素材
  18.  
  19. 往项目中拖拽素材时,通常选择
  20.  
  21. 1 Destination: 勾选
  22.  
  23. 2 Folders:
  24.  
  25. 1)选择第一项:黄色文件夹
  26.  
  27. 注意点:Xcode中分文件夹,Bundle中所有所在都在同一个文件夹下,因此,不能出现文件重名的情况
  28.  
  29. 特点:
  30.  
  31. a.可以直接使用[NSBundle mainBundle]作为资源路径,效率高!
  32.  
  33. b.可以使用[UIImage imageNamed:]加载图像
  34.  
  35. 2)选择第二项:蓝色文件夹
  36.  
  37. 注意点:Xcode中分文件夹,Bundle中同样分文件夹,因此,可以出现文件重名的情况
  38.  
  39. 特点:
  40.  
  41. a.需要在[NSBundle mainBundle]的基础上拼接实际的路径,效率较差
  42.  
  43. b.不能使用[UIImage imageNamed:]加载图

iOS imageNamed VS imageWithContentsOfFile的更多相关文章

  1. iOS imageNamed 与 imageWithContentsOfFile 的区别

    imageNamed 方法 1)后面的参数是icon的名字,图片可以存在项目中,也可以存在Asset中 2)该方法只适合一些中小型的图片读取,而一些比较大的资源图片并不适合用这个方法 3)这个方法加载 ...

  2. imageNamed和imageWithContentsOfFile区别

    在 Apple 官方帮助文档提供了两个加载图片的方法 imageNamed , 其参数为图片的名字 imageWithContentsOfFile , 其参数是图片文件的路径 下面主要是说一下他们的区 ...

  3. imageNamed、imageWithContentsOfFile、imageWithData

    [UIImage imageNamed:ImageName]; 1.加载图片占据的内存较大 2.相同的图片只会加载一份到内存中,如果同时使用,使用同一个对象即可 3.当对象销毁,图片对象不会随着一起销 ...

  4. imageNamed 与 imageWithContentsOfFile的区别

    如题,是不是大家为了方便都这样加载图片啊 myImage = [UIImage imageNamed:@"icon.png"];那么小心了这种方法在一些图片很少,或者图片很小的程序 ...

  5. UIImage imageNamed 与 imageWithContentsOfFile的差别

    [UIImage imageNamed:]仅仅适合与UI界面中的贴图的读取,较大的资源文件应该尽量避免使用 用UIImage载入本地图像最经常使用的是以下三种: 1.用imageNamed方法 [UI ...

  6. imageNamed 、imageWithContentsOfFile、 initWithContentsFile区别

    [UIImage imageNamed:]只适合与UI界面中的贴图的读取,较大的资源文件应该尽量避免使用 用UIImage加载本地图像最常用的是下面三种: 1.用imageNamed方法 [UIIma ...

  7. imageNamed 与 imageWithContentsOfFile差额

    郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助.欢迎给作者捐赠,支持郝萌主,捐赠数额任意.重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 普通情况下 ...

  8. 【腾讯Bugly干货分享】微信读书iOS性能优化

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/578c93ca9644bd524bfcabe8 “8小时内拼工作,8小时外拼成长 ...

  9. 微信读书 iOS 性能优化总结

    微信读书作为一款阅读类的新产品,目前还处于快速迭代,不断尝试的过程中,性能问题也在业务的不断累积中逐渐体现出来.最近的 1.3.0 版本发布后,关于性能问题的用户反馈逐渐增多,为此,团队开始做一些针对 ...

随机推荐

  1. C++ Primer(第五版)读书笔记 & 习题解答 --- Chapter 3

    Chapter 3.1 1. using声明具有如下的形式: using namespace::name; Chapter 3.2 1. C++标准一方面对库类型所提供的操作做了规定,另一方面也对库的 ...

  2. Linux 脚本点滴知识积累

    1.以openwrt中的/etc/hotplug.d/button/00-button为例 . /lib/functions.sh do_button () { local button   ---- ...

  3. VC++通过API连接MySQL

    1.  首先安装MySQL数据库server,本文安装的是mysql-installer-community-5.6.10.1.msi这个版本号.至于各个版本号有什么不同,不在这里说明. 例如以下的默 ...

  4. iOS --随机打乱一个数组的顺序 获得一个新的数组

    NSArray* arr = @[@"1",@"2",@"3"]; arr = [arr sortedArrayUsingComparato ...

  5. 使用PHP创建一个socket服务端

    与常规web开发不同,使用socket开发可以摆脱http的限制.可自定义协议,使用长连接.PHP代码常驻内存等.学习资料来源于workerman官方视频与文档. 通常创建一个socket服务包括这几 ...

  6. iOS提交到appstore的新要求

    本文转载至http://blog.csdn.net/kqygww/article/details/41277555     64-bit and iOS 8 Requirements for New ...

  7. selenium的元素定位-鼠标事件

    鼠标事件 ActionChains 类提供了鼠标操作的常用方法: perform(): 执行所有 ActionChains 中存储的行为: context_click(): 右击: double_cl ...

  8. HDU4027(Can you answer these queries?)

    题目链接:传送门 题目大意:有一个长度为n的数组,有m次操作,每次操作输入 v x y,v==0时x~y区间内的数都开平方并且向下取整,v==1时求x~y区间内所有数的和. 题目思路:long lon ...

  9. iOS之事件的传递和响应机制

    前言: 按照时间顺序,事件的生命周期是这样的: 事件的产生和传递(事件如何从父控件传递到子控件并寻找到最合适的view.寻找最合适的view的底层实现.拦截事件的处理)->找到最合适的view后 ...

  10. JavaScript正则中\1\2的作用

    一.示例 1. 验证6个相同的数字 var reg = new RegExp(/^(\d)\1{5}/g); var a = '333333'; if(reg.test(a)) { alert('ri ...