iOS图片的加载优化 initWithContentsOfFile

iOS内存优化总结 当我们开发iOS应用时,好的性能对我们的App来说是很重要的。你的用户也希望如此,但是如果你的app表现的反应迟钝或者很慢也会伤害到你的审核。       然而,由于ios设备的限制有时很难工作得很正确。我们开发时有很多需要我们记住这些容易忘记的决定对性能的影响。       这是为什么我写这篇文章的原因。这篇文章用备忘录的形式集合了28个技巧和诀窍可以用来提高你的app性能。所以保持 阅读详情

有的小伙伴可能没那么在意图片的加载方式,习惯了imageNamed,看到initWithContentsOfFile时也没有仔细看他的作用。

1、首先我做了一个实验,比较了两种方式对内存的影响。

测试方法,对于app的引导页(5张图)分别使用imageName和initWithContentsOfFile去初始化图片

  • 使用imageName加载图片
[UIImage imageNamed:@"launch_iphonex"];

启动之后,进入引导页,打开Xcode的内存监测,看到每滑动一次,内存增加一些,5张图下来,累计增加了20M+ 的内存。引导页过后,内存依然没被释放(imageFileNamed的特点)

大致计算一下增加的内存:比如iPhoneX的引导图1125 * 2436,加载出来大约是3M(这里我不会很会算,可参考)

内存变化如下

  •   使用initWithContentsOfFile去初始化图片,内存依旧会增加,但是引导页过后,内存直线下降。

内存变化如下

 这里看到效果很明显,对于我们不常用/只使用一次的图片资源,使用initWithContentsOfFile去加载图片是非常不错的选择,对于高要求的的开发者几乎是一定要优化的点。

2、下面简单介绍下二者的区别:

1)imageNamed 

用这个方法加载的时候,它会在系统缓存中查找并返回一个对象,如果缓存中没有找到对应的对象,就根据文件名找到,然后创建image对象,再返回。在APP的整个生命周期内,加载过的图是一直存在内存中的,内存就会持续累加。但是对于一些文件很小,我们又经常用到的小图,很实用。比如tableView中的一个箭头,在多行都会展示,这时候使用imageNamed效率是很高的。

2)initWithContentsOfFile,加载图片时,image对象的生命周期与imageView绑定,会随着imageView释放而释放掉。对于一些不常用的且大的图片,是很好的选择。有些同学习惯用asset去存图片,自动分配2倍3倍图,如果使用这个方法就不好用了,建议直接搞一张3倍图拖入某个特定的文件夹。还要注意的是,这时候自动布局的话,记得写全布局属性,他这会儿已经不会自动调整了。引导图、某一页面特殊的背景图等等都可以使用这种方式。

initWithContentsOfFile编码(这里只兼容了png,可以开放更多参数)

+ (UIImage *)imageFileNamed:(NSString *)imageName {
    
    NSString *filePath = [NSString stringWithFormat:@"%@/%@.png",[[NSBundle mainBundle] resourcePath],imageName];
    UIImage *image = [[UIImage alloc] initWithContentsOfFile:filePath];
    
    return image;
}

OK提高我们的标准,让你的APP运行的更流畅。

R 语言 ggplot2 绘制精美高级全球地图 在本教程中,我们将学习如何使用R语言和ggplot2包绘制精美高级地图。ggplot2是一个功能强大的数据可视化包,它可以让我们创建漂亮、交互式的地图。我们将使用R中的一些其他包来处理地理空间数据,以便与ggplot2无缝协作。 阅读详情

相关推荐

74hc595驱动模块的Verilog设计(线性状态机)

module hc595_driver( input clk, //50Mhz input rst_n, //复位信号 input [15:0] data, //数码管待显示数据,8位段选数据,8位位选数据 input en, //使能 o...

qq_41294540的博客 3740

无法打开指定路径上的文件

最近碰到一个小问题,就是在打开一个txt文档的时候,能查找文件的存在,却不能获取到它的数据,initWithContentsOfFile方法返回的值为空,试了几种方法都无法加载,后来发现是在工程设置中签名没有设置好,将Code Signing Entitlement选项选择Other,然后将Other的值设置为空,重新运行软件,就会发现可以加载txt文件了。下面是设置的截图: ...

三岁牧羊的博客 390

Grok 3国内怎么用?超详细使用指南+实用指令模板

主要是用于快速分析学术论文,提取关键信息,总结研究成果。Analyze the following research paper: [粘贴或上传论文内容]1. Extract key findings, methodologies, and conclusions. (提取主要发现、方法和结论。2. Identify statistical significance and data points. (识别统计显著性和数据点。

Survivor_sl的博客 1万+

[IOS] 图片显示 imageNamed, initWithContentsOfFile 的区别

1.用imageNamed方法 [UIImage imageNamed:ImageName]; 此方法为常见方法,利用它可以方便加载资源图片。用imageNamed的方式加载时,会把图像数据根据它的名字缓存在系统内存中,以提高imageNamed方法获得相同图片的image对象的性能。即使生成的对象被 autoReleasePool释放了,这份缓存也不释放。而且没有明确的释放方法。

Bmmboo的专栏 5779

EBS开发_离散工单创建API

--以下代码于20171213在TONY环境中实现 DECLARE     l_iface_rec    wip.wip_job_schedule_interface%ROWTYPE; --工单任务接口表     l_group_id     NUMBER;     l_returnstatus VARCHAR2(40);     l_errormsg     VARCHAR2(2000

蜗牛先生快跑的博客 2595

AVDepthData、LiDAR 深度数据与人像模式全解析:iOS 真实景深图采集与处理实战

在 iOS 高端影像系统中,真实景深信息的采集与利用已成为区分旗舰设备与基础设备的重要能力。Apple 自 iPhone 7 Plus 引入双摄虚化以来,逐步发展出基于 AVDepthData、TrueDepth 与 LiDAR 的多维深度感知技术,并开放接口供开发者获取高精度深度图,构建背景虚化、人像分割、3D 重建等多种功能。本文将深入解析 AVDepthData 的结构与使用方式,系统讲解 LiDAR 采集架构、人像模式的景深融合逻辑,以及如何在实际项目中采集、预览并处理深度图数据,实现具备工程可用性

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1861

initWithContentsOfFile遇到的大坑

用plist保存了,title等信息。数组初始化用initWithContentsOfFile的时候,数组老是为nil。 各种尝试都不行,可变数组,不可变数组,clean模拟器,找沙盒路径都没用..最后发现plist的root类型是字典,这个需要改成Array.

weixin_38837735的博客 2175

【面试系列】软件架构师 高频面试题及详细解答

本文介绍了软件架构师岗位的初级、中级和高级面试题及详细解答,涵盖了系统设计、面向对象设计、分布式系统、云计算技术、性能优化等关键领域。通过这些问题和解答,候选人可以深入理解软件架构师的核心职责和技能要求。此外,文章总结了在面试中需要掌握的常考知识点,包括架构模式、分布式系统管理、安全性、数据管理和DevOps实践。通过掌握这些知识点,软件架构师能够有效设计和指导复杂系统的结构,确保系统的可扩展性、性能和维护性。

在路上的专栏 850

25条提高iOS App性能的建议和技巧

为什么80%的码农都做不了架构师?>>> ...

weixin_33935777的博客 398

漏洞挖掘之工具配置

本文主要讲解burp工具的插件安装。

qq_64775230的博客 3273

VB.net:VB.net编程语言学习之基于VS软件利用VB.net语言实现对SolidWorks进行二次开发的案例应用(启动SolidWorks代码/直接驱动模型代码/路径下模型驱动代码/创建两个文

VB.net:VB.net编程语言学习之基于VS软件利用VB.net语言实现对SolidWorks进行二次开发的案例应用(启动SolidWorks代码/直接驱动模型代码/路径下模型驱动代码/创建两个文件夹对话框代码/重新生成三维图代码/导出工程图代码)之详细攻略 目录 基于VS软件利用VB.net语言实现对SolidWorks进行二次开发的案例应用 1、调用SW的模型,并进行参数修改 1.1、VB按钮之SW的三维零件之间切换思想 1.2、调用SW 2、基础案例经验 2.1、设计SW的拉

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 3031

objective-c 读取文本文件内容(stringWithContentsOfFile和initWithContentsOfFile)

NSString类提供了很多方法来从文件或者URL中读取数据.
通常情况下,你是知道文件的编码的,读取数据就很容易.
如果你有一个文本(plaintext), 但是不知道它的编码, 那就有点困难了. 从已知编码的文件读取数据
可以使用 stringWithContentsOfFile  :encoding:error 或者相应的init函数 (initWithContentsOfFile:

X-Prince的博客 6986

论文阅读: SIGIR 2025 ID-Free Not Risk-Free: LLM-Powered Agents Unveil Risks in ID-Free Recommender Syste

咱们平时用的推荐系统(比如购物APP推商品、视频APP推剧),大多是“有ID”的——每个用户、每个商品都有个专属ID,系统靠这些ID记录你的浏览、购买历史,再给你推喜欢的东西。但这种方式有个大问题:新用户、新商品刚上线时没有ID历史数据,系统没法精准推荐,这就是“冷启动”难题。后来人们搞出了“无ID推荐系统”:不用ID了,改成直接分析商品的文字信息(比如商品标题、描述),靠大语言模型(LLM,类似ChatGPT的技术)把文字转成“语义代码”,再通过这些“代码”判断你可能喜欢什么。

CSPhD-winston的博客 975

UIImage ImageNamed不cache

为什么80%的码农都做不了架构师?>>> ...

weixin_33768481的博客 136

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

IOS app启动动画的实现

关于在App启动时播放一段动画,可以用flash直接播放,也可以用多张连续的图片来实现,在项目中,我选择了后者。 通过连续的多张图片做出动画效果,系统自带的UIImageView就能完成这个功能,一开始我也这么做的,但是最后发现内存爆了,占了800M多(iPAD)。(注:一张100K的png图片初始化为Image放到内存后会占用几M到几十M的空间不等)   最后我选择了通过定时器不断刷新UII

jinkelei的专栏 2106

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

UIImage imageNamed 与 imageWithContentsOfFile的差别

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

weixin_34275734的博客 155

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

[iPhone]图片显示 imageNamed initWithContentsOfFile 的区别

imageNamed:与- (id)initWithContentsOfFile:(NSString *)path的区别 一、 imageNamed: 只能读取包文件下的图片,不能读取Documents文件夹中的图片文件。 二:内存考虑 1)用imageNamed的方式加载时,系统会把图像Cache到内存。如果图像比较大,或者图像比较多,用这种方式会消耗很大的内存,而且

WangPoTongXue技术专栏 1128

ios加载图片内存优化

以7张添加到bundle中的图片通过NSTimer每2s执行一次加载操作为例:     图片加载方式(2种):      (1)[UIImage imageNamed:图片名];           实现过程:           程序加载打包到手机上 == 手机存储空间           程序刚开始运行      == 手机内存           点击tom的某个动作按钮,通过[

denggun12345的博客 1622

NSImage加载图片

转自:http://www.leoshao.com/57.html 刚开始用NSImage,从网上查找的方法是调用 imageNamed方法 NSImage *myImage = [NSImage imageNamed:@"imageName.png"] ;

henry_sea的专栏 7594

IOS UIImage常用的加载图片有3种方式

作者: gb18030    时间: 2011-7-14 15:52     标题: 求解图片的加载方式 UIImage常用加载图片有3种方式,imageWithContentsOfFile、initWithContentsOfFile、imageNamed,我知道第三个会把图片缓存再内存里不利于释放的,但是小弟三个方法各有什么优劣,哪个可以更有效的管理内存不是很清楚,希望有大牛解析下~

hengshujiyi的专栏 2000

iOS图片消耗内存过大的处理

参考博客:http://www.111cn.net/sj/ios8/90677.htm 最近因为图片太耗费内存问题进行了测试 测试方式是启动页->A页面->返回启动页 A页面内有一个imageView,给该imageView用不同的方式加载图片 内存单位为M 经过返回测试,在使用图片的时候,最佳方法是 UIImage*image=[[UIImage alloc]initWit

黄晓庆的博客 2131

ios 图片优化笔记

1.  xcode 集成了png优化工具 pngcrush,编译的时候可以png格式文件进行优化和压缩 build setting  搜 png compress png files 设置为yes 2.压缩后png 一般会比jpeg 格式文件大,本地图片推荐使用png,网络图片下载使用jpeg 3.创建 UIImage对象 类构造方法 +imageName  会在内存中建

yihuichongtian的专栏 368

iOS开发图片加载的内存问题及优化方案

原创作者:Magic-Unique 原文地址:https://github.com/Magic-Unique/HXImage猿吧 - 资源共享论坛: http://www.coderbar.cn 做最优质的iOS 学习资源共享平台! 这篇文章是笔者在开发App过程中发现的一些内存问题, 然后学习了YYKit框架时候也发现了图片的缓存处理的不够得当. 以下内容是笔者在开发中做了一些实验以及总...

weixin_33757911的博客 217

细讲UIImage加载方式

原文:http://www.henishuo.com/image-loaded-method/ 前言 关于本地图片UIImage的加载问题,还是需要注意的。不同的加载处理方式,在效率和性能上还是有差异的。 今天,我们来讲讲UIImage的加载应该选择什么样的API来加载! 两种API 这两种API分别是: -imageNamed: 默认加载图片成功后会内存中缓存

备忘录-IOS知识等 538

用imageNamed加载图片产生的问题

转自南非子: 通常我们会用imageNamed:来加载图片,但是用这个API有个问题,就是它会缓存加载的image。 因此,对于那些被重用的图片,这个API很高效。但是对于那些使用很少的图片,用这个就很耗内存,那怎么才能及时的释放掉内存呢? 使用initWithContentsOfFile:即可。 NSString path = [[NSBundle mainBundle] pa...

a28435256的博客 167

ios 懒加载

ios 懒加载 所谓的懒加载可以定义为:延时加载,即当对象需要用到的时候再去加载。其实就是所谓的重写对象的get方法,当系统或者开发者调用对象的get方法时,再去加载对象。 需要注意:重写get方法时,先判断对象当前是否为空,为空的话再去实例化对象 懒加载的优点 不需将对象的实例化写到viewDidLoad,可以简化代码,增强代码的可读性对象的实例化在getter方

木叶57的博客 627
上一篇: 开发之路
下一篇: 技术招聘见解
gp103
博客等级 码龄11年 158粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值