iOS面试题收藏iOS基本功

iOS 面试锦囊之性能优化

2019-04-01  本文已影响90人  flowerflower
😌😌

前言
在面试过程中,性能优化、多线程、runtime、RunLoop、是必不可少的谈论话题。有一些面试官可能要你当场手写算法,曾经笔者就遇到过。结果可想而知,面试通过。。。
而关于第三方的底层实现我想问的最多是AFNetworkingSDWebImage
之前笔者有写过多线程、RunLoop、runtime相关的知识,有需要的话可翻阅笔者之前的文章。

目录
一、CPU/GPU优化
1.1 CPU和GPU的概念
1.2 CPU/GPU优化
二、耗电优化
2.1 耗电的主要来源
2.2 耗电优化
三、启动优化
3.1 App启动的概念
3.2 启动优化
四、安装包瘦身

一、CPU/GPU优化

1.1 CPU和GPU的概念

在屏幕成像的过程中,CPU和GPU起着至关重要的作用

CPU(Central Processing Unit,中央处理器)

GPU(Graphics Processing Unit,图形处理器)

在ios中是有双缓冲机制, 有前帧缓存 后帧缓存

1.2 CPU/GPU优化

卡顿优化—— CPU
卡顿优化—— GPU
*科普离屏渲染
在OpenGL中,GPU有2种渲染方式
On-Screen Rendering:当前屏幕渲染,在当前用于显示的屏幕缓冲区进行渲染操作
Off-Screen Rendering:离屏渲染,在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作

离屏渲染消耗性能的原因
需要创建新的缓冲区
离屏渲染的整个过程,需要多次切换上下文环境:
1.从当前屏幕(On-Screen)切换到离屏(Off-Screen);
2.等到离屏渲染结束以后,将离屏缓冲区的渲染结果显示到屏幕上
3.需要将上下文环境从离屏切换到当前屏幕

哪些操作会触发离屏渲染?
- 光栅化,layer.shouldRasterize = YES

- 遮罩,layer.mask

- 圆角,同时设置layer.masksToBounds = YES、layer.cornerRadius大于0
考虑通过CoreGraphics绘制裁剪圆角,或者叫美工提供圆角图片

- 阴影,layer.shadowXXX
如果设置了layer.shadowPath就不会产生离屏渲染

二、耗电优化

2.1 耗电的主要来源

2.2 耗电优化

1、尽可能降低CPU、GPU功耗

2、少用定时器

3、优化I/O操作

4、网络优化

5、定位优化


三、启动优化

3.1 App启动的概念

App的启动可以分为2种:
App启动时间的优化,主要是针对冷启动进行优化

通过添加环境变量可以打印App的启动时间分析
Edit scheme -> Run -> Arguments-> Enviroment Variables
DYLD_PRINT_STATISTICS 设置为1

App的冷启动可以概括为三大阶段
dyld

dyld(dynamic link editor),Apple的动态链接器,可以用来装载Mach-O文件(可执行文件、动态库等)
启动App时,dyld所做的事情有:

runtime

启动App时,runtime所做的事情有:

main
3.2 启动优化
dyld
runtime
main

四、安装包瘦身

安装包(IPA)主要由可执行文件资源组成

可执行文件瘦身
资源

去除没有用到的资源:https://github.com/tinymind/LSUnusedResources

去除没有用到的资源.png
上一篇 下一篇

猜你喜欢

热点阅读