在ios的UI交互设计时,对图片的处理是难免的;不同的处理方式会对内存有不同的影响;

************************************************************

a:图片格式及NSBundle加载全路径:

  1》xcode或者说苹果官方是极力推荐使用的图片格式是png

  2》所有如果项目中用得是png的图片,则不用写后缀名

  3》其他格式要求后缀名,特别是用UIImage加载图片时

  NSBundle加载全路径的常用代码:

  

// 得到文件的路径
NSString *fullPath = [[NSBundle mainBundle] pathForResource:namePic ofType:nil];
// 从路径中读取图片
UIImage *newImg = [[UIImage alloc] initWithContentsOfFile:fullPath];

  

************************************************************

b:以tom猫为例,看待UIImage的两种不同形式的图片加载

  tom猫用得是逐帧序列动画:背景是一个满屏的UIImageView,然后再UIImageView中一张张的切换图片;

  1》_tomList是一个UIImageView类型的类的属性;那么播放逐帧序列动画的步骤

  

// 1: 设置要播放逐帧序列动画的图片
_tomList animationImages = array; // array通常是个图片数组
// 2: 设置动画的时长:
_tomList animationDuration = 2.0;
// 3:设置重复次数
_tomList animationRepeatCount = ;
...
...
// 最后:开始动画
[_tomImage startAnimating];

  array里的图片加载的方式

  1:UIImage *img = [UIImage imageNamed:namePic];

  // UIImage imageNamed这种方式是有缓存的,如果是第二次调用,它不是从文件中取,而是直接从缓存中拿,也就是说内存会越来越大

  但是直接从内存中取图片,速度肯定快一点,性能高一点

  2: NSString *fullPath = [[NSBundle mainBundle] pathForResource:namePic ofType:nil];

UIImage *newImg = [[UIImage alloc] initWithContentsOfFile:fullPath];

      这样是不会有缓存的,是使用全路径加载;但是也不会再动画播放完成后自动释放;只有进行下一次动画才会被释放;所以一般我们可以手动释放   

// 动画播放完成后,释放图片

[_tomImage performSelector:@selector(animationImages) withObject:nilafterDelay:self.tomImage.animationDuration];

总结:两种方式各有利弊,imageNamed性能高一点,但是前提是图片占用的内存较小,且该图被多个地方或频繁使用;

    但是如果,图片存储空间大,内存吃不消,就得用initWithContentsOfFile:fullPath。

最新文章

  1. npm设计代理
  2. request response
  3. 自己关于cocoapods的使用的一些理解和总结
  4. AC日记——潜伏着 openjudge 1.7 11
  5. Q查询
  6. Math中floor,round和ceil的区别
  7. rapidxml使用
  8. oracle经典操作sql
  9. 判断ie,并确定其版本号
  10. .NET程序内,访问私有或者保护成员的技巧
  11. Servlet+Tomcat制作出第一个运行在Tomcat上的Java应用程序
  12. IP地址接口小结
  13. VBS常用使用技巧
  14. useradd新建用户和权限分配
  15. Jupyter(Python)中无法使用Cache原理分析
  16. iOS 图片的拉伸,取固定区域显示
  17. 邮件服务器安装--Postfix + Dovecot + Squirrelmail--CentOS 6.4
  18. Java字符串String
  19. jQuery - 字符串与json对象之间的转换
  20. springboot区分开发、测试、生产多环境的应用配置

热门文章

  1. Ajax学习笔记(一)
  2. JavaScript原型(链)学习笔记
  3. asp.net的简单分页程序
  4. 我的博客模板(线框图wireframe)
  5. MySQL字符集编码的理解分析
  6. OSPF_Network-type
  7. 【iOS基础学习随笔-1】-基于对象的程序设计
  8. Xcode6 模拟器不显示键盘
  9. 20141017--类型String类
  10. CentOS6.4安装LAMP环境