imageNamed , imageWithContentsOfFile , initWithContentsFile 三种图片加载方式的区别

UIImage常用的加载图片有3种方式: imageNamed , imageWithContentsOfFile , initWithContentsFile .
imageNamed:
UIImage image = [UIImage imageNamed:@"image.gif"] . 得到的对象是autoRelease的。这个方法有点特殊,它在生成image对象的同时,会把图像数据 根据它的名字缓存在系统内存中,以提高imageNamed方法获得相同图片的image对象的性能。即使生成的对象被 autoReleasePool释放了,这份缓存也不释放。这对与在应用中有大量相同图片时,非常有用,可以提高性能和内存利用率。

imageWithContentsOfFile :
UIimage image = [UIImage imageWithContentsOfFile:@"path"] 。得到的对象时autoRelease的,当autoReleasePool释放时才释放。不系统缓存。

initWithContentsFile
UIimage image = [[UIImage alloc] init initWithContentsFile] 。 的到的对象没用后,要手动release掉。不系统缓存。release后立即释放,一般用在封面等图比较大的地方。

使用imageNamed方式,用同一张图片贴多个imageView应该是经过极大的优化,耗时和内存都极小,而使用imageWithContentsOfFile则有巨大消耗:

生成的UIImage对象内存地址 生成10万个相同文件名 使用相同文件名的185
的UIImage对象的内 个 UIImageView对象
存 及耗时 进行贴图

内存:28.70M->32.90M 内存:29.69M-32.84M
imageNamed方式 同一个内存地址 耗时:瞬时 耗时:瞬时

imageWith 内存:29.38M->300.96M 内存:30.21M->537.57M
ContentsOfFile 各不相同的内存地址 耗时:30秒 耗时:40秒以上

时间: 2024-12-24 08:32:32

imageNamed , imageWithContentsOfFile , initWithContentsFile 三种图片加载方式的区别的相关文章

EF的三种数据加载方式

EF中有3种数据加载方式,具体如下: 延迟加载(默认): 设置导航属性为virtual 贪婪加载:不设置导航属性为virtual,并且对导航属性使用Include 显示加载:不设置导航属性为virtual,并且对导航属性使用Reference(单个对象).Load()或Collection(对象集).Load() public class Programm { public static void Main() { TestDbContext db = new TestDbContext();

springboot(一) 三种热加载方式

参考博客:开发常用的热部署方式汇总 热加载方式有三种: Spring Loaded spring-boot-devtools JRebel插件 原文地址:https://www.cnblogs.com/rouqinglangzi/p/9503246.html

iOS 正确选择图片加载方式

正确选择图片加载方式能够对内存优化起到很大的作用,常见的图片加载方式有下面三种: //方法1 UIImage *imag1 = [UIImage imageNamed:@"image.png"]; //方法2 UIImage *image2 = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"image.png" ofType:nil]]; //方法3 NSData

felayman---nodejs的几种模块加载方式

nodejs的几种模块加载方式 一.直接在exports对象中添加方法 1.首先创建一个模块(module.js)module.js exports.One = function(){ console.log('first module'); }; 2.load.js var module =require('./module'); module.One(); 这样我们就可以在引入了该模块后,返回一个exports对象,这里是指module对象,其实都只是两个引用或者句柄,只是都指向了同一个资源

ios的UIImage的两种不同的图片加载方式 tom猫

在ios的UI交互设计时,对图片的处理是难免的:不同的处理方式会对内存有不同的影响: ************************************************************ a:图片格式及NSBundle加载全路径: 1>xcode或者说苹果官方是极力推荐使用的图片格式是png 2>所有如果项目中用得是png的图片,则不用写后缀名 3>其他格式要求后缀名,特别是用UIImage加载图片时 NSBundle加载全路径的常用代码: ? 1 2 3 4 //

嵌入式启动之三:应用程序的三种存储和加载方式

通过前面嵌入式启动方式的学习,再来理解嵌入式应用程序的三种加载方式是比较容易的.一般意义上,启动是为了引导OS到内存,而应用程序则是操作系统run起来后的用户选择,两者是比较相似的.先根据启动的两种方式来介绍应用程序的加载. 1. 对于资源有限型的嵌入式系统,应用程序在编译.链接之后,会通过二进制工具分析可执行文件的格式,抽出code和data段数据,生成.HEX格式或者.BIN格式,下载到SOC内置的flash中.在上电之后就直接执行了.这种加载方式称为离线加载. 2. 对于资源宽裕型的嵌入式

链接库DLL的概念,加载方式的区别

使用LR进行基于windows socket协议做接口测试,只提供了lr_load_dll方法来动态加载动态链接库.之前学习阶段,对TinyXML的学习,使用的静态链接库,当时在程序调用的时候方法也跟LR里的不一样,那问题来了:lib和dll的区别是什么,每种链接库有多少种加载方式,怎么加载呢. 链接库可以向应用程序提供一些函数,变量和类.动态链接库的动态调用(也叫显式调用,手工加载)我是可以运用了,但是静态调用(也叫隐式调用,自动加载).静态链接库:lib中的函数不仅被连接,全部实现都被直接包

正确选择图片加载方式能够对内存优化起到很大的作用,常见的图片加载方式有下面三种:

1 2 3 4 5 6 7 //方法1   UIImage *imag1 = [UIImage imageNamed:@"image.png"];   //方法2   UIImage *image2 = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"image.png" ofType:nil]];   //方法3   NSData *imageData = [NSD

三种Spring加载机制

方法一. 在main方法中启动Spring ApplicationContext ac = new XmlApplicationContext("applicationContext.xml"); 方法二. 利用Spring自带的Servlet启动, 配置好Servlet, 加载Servlet的时候, 就初始化了WebApplicationContext 方法三. 利用Spring自带的Listener启动, 装配好Listener, 加载Listener的时候, 就初始化了WebAp