ios的UIImage的两种不同的图片加载方式 tom猫
在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猫的更多相关文章
- iOS 正确选择图片加载方式
正确选择图片加载方式能够对内存优化起到很大的作用,常见的图片加载方式有下面三种: //方法1 UIImage *imag1 = [UIImage imageNamed:@"image.png ...
- @PropertySource加载文件的两种用法以及配置文件加载顺序
第一种: 现在我把资源文件的路径放在application.properties里 config.path=/home/myservice/config.properties @PropertySou ...
- Asp.Net 中Grid详解两种方法使用LigerUI加载数据库数据填充数据分页
1.关于LigerUI: LigerUI 是基于jQuery 的UI框架,其核心设计目标是快速开发.使用简单.功能强大.轻量级.易扩展.简单而又强大,致力于快速打造Web前端界面解决方案,可以应用于. ...
- jquery文档加载几种写法,图片加载写法
jquery文档加载写法: $(function(){ }) ; //个人最常使用方式 $(document).ready(function(){ }); //调用文档对象下的ready方法传入一个函 ...
- 二、从GitHub浏览Prism示例代码的方式入门WPF下的Prism之Modules的几种加载方式
这一篇梳理Prism中07示例Module的几种加载方式. 07示例分为了5个,有5种不同的Module加载方式. 我们开始学习加载Modules 观察07-Modules-Appconfig示例 分 ...
- iOS开发笔记-两种单例模式的写法
iOS开发笔记-两种单例模式的写法 单例模式是开发中最常用的写法之一,iOS的单例模式有两种官方写法,如下: 不使用GCD #import "ServiceManager.h" ...
- IOS文件操作的两种方式:NSFileManager操作和流操作
1.常见的NSFileManager文件方法 -(NSData *)contentsAtPath:path //从一个文件读取数据 -(BOOL)createFileAtPath: path cont ...
- iOS活动倒计时的两种实现方式
代码地址如下:http://www.demodashi.com/demo/11076.html 在做些活动界面或者限时验证码时, 经常会使用一些倒计时突出展现. 现提供两种方案: 一.使用NSTime ...
- iOS 两种不同的图片无限轮播
代码地址如下:http://www.demodashi.com/demo/11608.html 前记 其实想写这个关于无限轮播的记录已经很久很久了,只是没什么时间,这只是一个借口,正如:时间就像海绵, ...
随机推荐
- asp.net MVC 如何隐藏 Response Header 版本号
根据借楼最少资源原则,有时候MVC需要隐藏自己的版本号,其实这里也是比较简单的,只需要在Global.ascx 的Application_Start()中添加一行代码既可 添加为 MVCHandle ...
- SQL 把查出来的信息整合为一张表
select name ,population from bbc where name='France' union all select name ,population from bbc wher ...
- 十五、Android学习笔记_授权过程
1.需要申请App Key和App Secret.不同的开发平台有不同的接入方式,可以参考文档,然后将这两个值放进去. 2.通过OAuth类实现认证,它会自动跳转到认证界面,进行授权,成功之后需要处理 ...
- MYSQL多实例配置与使用教程
原文http://www.111cn.net/database/mysql/58651.htm 在实际的开发过程中,可能会需要在一台服务器上部署多个MYSQL实例,那建议使用MYSQL官方的解决方案 ...
- 【学习笔记】【C语言】选择结构-if
1.if的第1种结构 if(条件) { 语句1; 语句2; ...... } 如果if右边小括号()中的条件成立,也就是为“真”时,就会执行大括号{}中的语句: 如果条件为假, ...
- Codevs 3231 小吃
时间限制: 1 s 空间限制: 16000 KB 题目等级 : 黄金 Gold 题目描述 Description 这里简直是吃货的天堂,小吃太多了.数不胜数. 假设岛上有N种小吃,每种体积Vi, ...
- linux 线程函数大全
Technorati 标签: Linux thread 索引: 1.创建线程pthread_create 2.等待线程结束pthread_join 3.分离线程pthread_detach 4.创建线 ...
- C语言成绩测试 ,水仙花数,打印星图
#include <stdio.h>//输入输出头文件 #include<string.h> #include<stdlib.h> //局部被调用函数1 成绩检测 ...
- 《linux源代码包的编译安装》RHEL6
linux下源代码包的编译安装其实没那么复杂. 我是win7系统装的虚拟机,就简单说下: 举个简单的例子: http://www.openssl.org/ 这是openssl的官网,下载openssl ...
- 转:Apache与Nginx的优缺点比较
Apache与Nginx的优缺点比较 http://weilei0528.blog.163.com/blog/static/206807046201321810834431/ 1.nginx相对于ap ...