
性能优化
文章平均质量分 93
想名真难
这个作者很懒,什么都没留下…
展开
-
iOS中的3种卡顿检测
市面上的iOS卡顿分析方案有三种:监控FPS、监控RunLoop、ping主线程。前面2个都比较熟悉,第三个是最近才了解到的。方案一:监控FPS一般来说,我们约定60FPS即为流畅。那么反过来,如果App在运行期间出现了掉帧,即可认为出现了卡顿。监控FPS的方案几乎都是基于CADisplayLink实现的。简单介绍一下CADisplayLink:CADisplayLink是一个和屏幕刷新率保持一致的定时器,一但 CADisplayLink 以特定的模式注册到runloop之后,每当屏幕需要刷转载 2022-01-16 16:26:55 · 5436 阅读 · 0 评论 -
iOS App连续闪退检测及对应处理
最近线上出了一次事故, 在退出登录时, 正常的用户在退出登录时会清除成功userDefault中的数据,一般只会crash一次,但是有个用户比较特殊, 出现了连续闪退, 主要原因就是userDefault中的数据没有清除成功, 下次再启动app, 从userDefault中获取数据还认为是登录中的状态, 然后再次crash, 这样就陷入了死循环,导致只要打开app就会crash, 只有卸载重装才能解决问题.先来说说为什么这个用户比较特殊, 这是一个公司内部的用户, app一直都是覆盖安装, 随着版本的迭原创 2022-01-02 14:24:17 · 3174 阅读 · 0 评论 -
iOS堆内存碎片化及如何定位优化
常见的内存问题既然内存对 App 的体验如此重要,那么常见的内存问题有哪些呢? Heap size issues Leaks Heap size issues堆是进程地址空间的一部分,用来存储动态生成的对象。所以 堆的大小也对内存占用起到了至关重要的影响。为了保证程序的运行,我们无法避免的要在堆上生成对象,那么这些对象该如何有效的治理呢?那么首先我们需要确定堆上容易出现哪些问题? Heap allocation regressions 堆分配回归 Fragme转载 2021-12-31 23:01:16 · 1965 阅读 · 0 评论 -
OOM探究:XNU内存状态管理, Jetsam原理
前言OOM全称 Out Of Memory,指的是因为内存使用过多而导致的 APP 闪退。其实这本身是一种操作系统管理内存的机制。因为手机的内存是有限的,不可能无限制的使用,当内存不够时,需要将低优先级的进程kill,腾出内存以便高优先级的进程使用。这里发生的进程 kill,就是 OOM 了。那OOM的触发机制到底是怎么样的呢?目前市上的资料说的都比较模糊,没有一个很清晰的介绍源码探究幸好xnu这块代码是开源的,在opensource.apple.com里可以下到整个 xnu 内核的代码。内转载 2021-12-18 21:34:56 · 1589 阅读 · 0 评论 -
使用instrument-->Allocations进行内存分析
使用Instruments可以监测分析app内存相关的 Overall Memory Use、 Leaked Memory、 Abandoned Memory、 Zombies等内容。1、 Allocations点击XCode的Product菜单Profile启动Instruments,选择allocation,会自动启动allocation工具和模拟器。启动后,Allocations面板显示内存中的对象占用曲线,可以显示目前内存中分配了哪些对象,对象的数量,以及由哪些函数进行创建的。Al转载 2021-12-12 19:44:41 · 5057 阅读 · 0 评论 -
iOS后台任务beginBackgroundTask和endBackgroundTask成对出现
接到线上有人反馈我们的app经常在后台被杀死, 一开始以为是系统机制问题, 后来发现很大程度上是beginBackgroundTask && endBackgroundTask没有使用正确, 导致后台任务超时, 然后被系统kill.标准写法@property (nonatomic, assign) UIBackgroundTaskIdentifier backgroundTask;// APP进入后台的通知- (void)applicationDidEnterBackg..转载 2021-12-04 16:06:47 · 2927 阅读 · 0 评论 -
iOS耗电量优化
前言-理论篇耗电量分析是衡量应用性能表现的一个重要指标,要做好一款app,不仅仅是实现功能,我们需要考虑很多性能指标,让用户用的更爽,在开发过程中,要充分考虑到各项性能指标,比如定位精度,更高的精度,往往意味着更高的能耗,因此要平衡好精度和功耗,避免我们的app过多的过多的电量消耗,而界面卡顿可能意味着大量的多余计算,不仅影响流畅度,影响电量消耗,网络的不合理使用,也会增加耗电量,这些都是影响耗电量和用户体验的重要因素,因此必须要重视app耗电量。1.耗电量概念`x 轴`为时间,`y 轴`为转载 2021-12-03 18:03:24 · 3680 阅读 · 0 评论 -
性能调优,影响cpu,gpu的因素
CPU VS GPU关于绘图和动画有两种处理的方式:CPU(中央处理器)和GPU(图形处理器)。在现代iOS设备中,都有可以运行不同软件的可编程芯片,但是由于历史原因,我们可以说CPU所做的工作都在软件层面,而GPU在硬件层面。总的来说,我们可以用软件(使用CPU)做任何事情,但是对于图像处理,通常用硬件会更快,因为GPU使用图像对高度并行浮点运算做了优化。由于某些原因,我们想尽可能把屏幕渲染的工作交给硬件去处理。问题在于GPU并没有无限制处理性能,而且一旦资源用完的话,性能就会开始下降了(即使CP转载 2020-11-29 15:56:44 · 2536 阅读 · 0 评论 -
ios启动优化:二进制重排原理
什么是page Fault?系统内核给每个进程都提供了一个独立的虚拟地址空间,并且这个地址空间是连续的。这样,进程就可以很方便地访问内存,更确切地说是访问虚拟内存。虚拟地址空间的内部又被分为内核空间和用户空间两部分。并不是所有的虚拟内存都会分配物理内存,只有那些实际使用的虚拟内存才分配物理内存,并且分配后的物理内存,是通过内存映射来管理的。内存映射,其实就是将虚拟内存地址映射到物理内存地址。为了完成内存映射,内核为每个进程都维护了一张页表,记录虚拟地址与物理地址的映射关系。页表实际上存储在 CP转载 2020-12-06 16:21:35 · 806 阅读 · 0 评论 -
ios离屏渲染
GPU渲染机制:CPU 计算好frame等属性, 然后将显示的model提交到 GPU,GPU 渲染完成后将渲染结果放入帧缓冲区,随后视频控制器会按照 VSync 信号逐行读取帧缓冲区的数据,经过可能的数模转换传递给显示器显示。目前 iPhone 的屏幕刷新率是 60Hz,也就是刷新一帧的时间是 16.67 ms,每隔这段时间视频控制器就会去读一次缓存区的内容来显示。假如 GPU 遇到性能瓶颈,导致无法在一帧内更新渲染结果到帧缓存区,那么从缓存区读到的会是上一帧的内容,导致帧率降低界面卡顿。于是原创 2020-08-18 20:22:37 · 496 阅读 · 0 评论 -
iOS 图像渲染原理
原文 :https://www.jianshu.com/p/a81d48e0e44a本文将介绍 iOS 开发过程中图形渲染原理。图形渲染技术栈下图所示为 iOS App 的图形渲染技术栈,App 使用 Core Graphics、Core Animation、Core Image 等框架来绘制可视化内容,这些软件框架相互之间也有着依赖关系。这些框架都需要通过 OpenGL 来调用 G...转载 2019-07-03 11:18:48 · 899 阅读 · 1 评论 -
iOS实时卡顿检测-RunLoop
前言在移动设备上开发软件,性能一直是我们最为关心的话题之一,我们作为程序员除了需要努力提高代码质量之外,及时发现和监控软件中那些造成性能低下的”罪魁祸首”也是我们神圣的职责。众所周知,iOS平台因为UIKit本身的特性,需要将所有的UI操作都放在主线程执行,所以也造成不少程序员都习惯将一些线程安全性不确定的逻辑,以及其它线程结束后的汇总工作等等放到了主线,所以主线程中包含的这些大量计算、I...转载 2020-03-26 18:56:43 · 1814 阅读 · 1 评论 -
ios图像显示原理
CRT 和 LCD屏幕的渲染可能要从CRT(Cathode ray tube) 显示器和LCD(Liquid-crystal display) 显示器讲起。CRT 显示器是比较古老的技术,它使用阴极电子枪发射电子,在阴极高压的作用下,电子由电子枪射向荧光屏,使荧光粉发光,将图像显示在屏幕上,这也就是用磁铁靠近一些老式电视机的屏幕会让它们变色的原因。而 FPS 就是 CRT 显示器的刷新频率,电子枪每秒会对显示器上内容进行 60 - 100 次的刷新,哪怕在我们看来没有任何改变。...转载 2020-08-19 21:00:37 · 592 阅读 · 0 评论