在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。

ios的UIImage的两种不同的图片加载方式 tom猫的更多相关文章

  1. iOS 正确选择图片加载方式

    正确选择图片加载方式能够对内存优化起到很大的作用,常见的图片加载方式有下面三种: //方法1 UIImage *imag1 = [UIImage imageNamed:@"image.png ...

  2. @PropertySource加载文件的两种用法以及配置文件加载顺序

    第一种: 现在我把资源文件的路径放在application.properties里 config.path=/home/myservice/config.properties @PropertySou ...

  3. Asp.Net 中Grid详解两种方法使用LigerUI加载数据库数据填充数据分页

    1.关于LigerUI: LigerUI 是基于jQuery 的UI框架,其核心设计目标是快速开发.使用简单.功能强大.轻量级.易扩展.简单而又强大,致力于快速打造Web前端界面解决方案,可以应用于. ...

  4. jquery文档加载几种写法,图片加载写法

    jquery文档加载写法: $(function(){ }) ; //个人最常使用方式 $(document).ready(function(){ }); //调用文档对象下的ready方法传入一个函 ...

  5. 二、从GitHub浏览Prism示例代码的方式入门WPF下的Prism之Modules的几种加载方式

    这一篇梳理Prism中07示例Module的几种加载方式. 07示例分为了5个,有5种不同的Module加载方式. 我们开始学习加载Modules 观察07-Modules-Appconfig示例 分 ...

  6. iOS开发笔记-两种单例模式的写法

    iOS开发笔记-两种单例模式的写法   单例模式是开发中最常用的写法之一,iOS的单例模式有两种官方写法,如下: 不使用GCD #import "ServiceManager.h" ...

  7. IOS文件操作的两种方式:NSFileManager操作和流操作

    1.常见的NSFileManager文件方法 -(NSData *)contentsAtPath:path //从一个文件读取数据 -(BOOL)createFileAtPath: path cont ...

  8. iOS活动倒计时的两种实现方式

    代码地址如下:http://www.demodashi.com/demo/11076.html 在做些活动界面或者限时验证码时, 经常会使用一些倒计时突出展现. 现提供两种方案: 一.使用NSTime ...

  9. iOS 两种不同的图片无限轮播

    代码地址如下:http://www.demodashi.com/demo/11608.html 前记 其实想写这个关于无限轮播的记录已经很久很久了,只是没什么时间,这只是一个借口,正如:时间就像海绵, ...

随机推荐

  1. Android锁屏软件

    需求描述:锁屏软件就是点击应用然后直接锁屏,不会弹出任何界面 设计思路:应用启动以后通过getSystemService获取系统的服务,调用安卓系统的DevicePolicyManager和Compo ...

  2. css去掉默认的下拉,实现用户自定义的下拉列表

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  3. 微信小程序个人理解

    1:小程序不是用HTML5开发,它是由微信全新定义的规范,是基于XML+JS的,不支持也不兼容HTML,兼容受限的部分CSS写法.(wxml) weixin markup language 2:小程序 ...

  4. VpnService

    这段时间项目中使用到了VpnService,整理了一下官方文档的资料 VpnService is a base class for applications to extend and build t ...

  5. Objective-C中的封装、继承、多态、分类

    封装的好处: 过滤不合理的值 屏蔽内部的赋值过程 让外界不必关注内部的细节 继承的好处: 不改变原来模型的基础上,拓充方法 建立了类与类之间的联系 抽取了公共代码 坏处:耦合性强(当去掉一个父类,子类 ...

  6. (转)Yale CAS + .net Client 实现 SSO(2)

    第一部分:安装配置 Tomcat 第二部分:安装配置 CAS 1. 下载 CAS 及.NET CAS client. CAS下载地址:http://www.jasig.org/cas/download ...

  7. ES6新增Promise

    1.promise概念 ES6 原生提供了 Promise 对象. 所谓 Promise,就是一个对象,用来传递异步操作的消息.它代表了某个未来才会知道结果的事件(通常是一个异步操作),并且这个事件提 ...

  8. 分享10 个超酷的 HTML5/CSS3 应用及源码

    1.HTML5视频破碎重组特效,强大视觉冲击 HTML5视频播放器很多,但是HTML5视频特效还是很少见的,这款HTML5视频破碎重组特效非常刺激,给人强大的视觉冲击.点击视频任意地方,HTML5将会 ...

  9. Php 与 Json

    PHP与JSON 在PHP中存在两个与JSON相关的函数: json_encode($array或$object)函数:把一个数组或对象转化为JSON格式的字符串 json_decode($json, ...

  10. input中的id和name

    name在以下用途是不可替代的: 1. 表单(form)的控件名,提交的数据都用控件的name而不是id来控制.因为有许多name会同时对应多个控件,比如checkbox和radio,而id必须是全文 ...