iOS面试相关

iOS 性能优化

2019-11-09  本文已影响0人  最强的小强
前言:首先我们来了解一下CPUGPU

CPU,中央处理器,主要负责对象的创建和销毁,对象的属性调整,控件的布局计算,文本的计算和排版,图片的格式转换和解码,图像的绘制;
GPU,图形处理器,主要是对纹理的渲染;


性能优化解决方案:

一、CPU方面
  1. 尽量使用轻量级的对象,比如用不到事件处理的地方,可以考虑使用CALayer代替UIView;因为CALayer内部并没有属性,当调用属性方法时,它内部是通过运行时 resolveInstanceMethod为对象临时添加一个方法,并把对应属性值保存到内部的一个Dictionary 里,同时还会通知delegate、创建动画等等,非常消耗资源;
  2. 不需要频繁调用UIView的相关属性,比如frame和bounds的时候,尽量介绍不必要的修改;
  3. 尽量提前计算好布局,在有需要时一次性调整相关属性,不要多次修改属性;
  4. AutoLayout会比直接设置frame消耗更多的CPU资源;
  5. 图片的size最好刚好和UIImageViewsize保持一致;
  6. 控制线程的最大并发数量;
  7. 尽量把耗时的操作放到子线程中去。

附:UITableView优化:

  • 正确使用reuseIdentifier来重用cell
  • 尽量减少使用不透明的视图;
  • 避免渐变,图片缩放;
  • 缓冲行高;
  • cell内容是下载的话,用异步加载,缓冲结果;
  • 使用shadowPath来画阴影;
  • 减少subViews的数量;
  • 使用正确的数据结构存储数据。

二、GPU方面
  1. 尽量避免短时间内大量图片的显示,尽可能将多张图片合成一张进行显示;
  2. 尽量减少视图数量和层次;
  3. 减少使用透明的视图;
  4. 尽量避免出现离屏渲染;

注意:在OpenGL中,GPU有两种渲染方式:
1.On - Screen Rendering 当前屏幕渲染,在当前用于显示的屏幕缓冲区进行缓冲操作;
2.Off - Screen Rendering 离屏渲染,在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作;
离屏渲染消耗性能的原因:
1.需要开辟新的缓冲区
2.离屏渲染的整个过程,需要多次切换上下文环境,先是当前屏幕切换到离屏,等到离屏渲染结束后,将离屏缓冲区的结果显示,又要重新切换
哪些操作会触发离屏渲染?
1.栅格化,设置layer.shouldRasterize
2.遮罩,设置layer.maskToBounds
3.圆角,设置layer.cornerRadius
4.阴影,可设置layer.shadowPath


三、耗电方面

首先我们要明白耗电的主要来源:

  1. CPU处理过程;
  2. 网络方面;
  3. 定位方面;
    定位优化:
    · 如果只是需要快速确定用户的位置,最好用CLLocationManagerrequest方法,定位后自动让定位硬件断电;
    · 如果不是导航应用,尽量不要实时更新位置;
    · 尽量降低定位精度;
    · 需要后台定位时,尽量设置pauseLocationUpdatesAutomaticallyYES;
    · 尽量不要使用startMonitoringSignificantLocationChanges
  4. 图片方面;

四、APP启动优化
  1. 冷启动:从零开始启动APP
  2. 热启动:APP已经在内存中,在后台存活着,在后台点击图标的时候启动APP
    冷启动优化:
  1. dyld动态链接库装载可执行文件,动态库;
  2. 使用runtime调用处理类,分类方法,``objc结构初始化;
  3. main函数;

上一篇下一篇

猜你喜欢

热点阅读