iOS性能优化

2019-06-16  本文已影响0人  分流替躺欧阳克

屏幕呈像

iOS的屏幕成像中,CPU,GPU起着关键作用,屏幕的卡顿与CPU对数据的计算,GPU的渲染,屏幕的刷新率都有关。

  1. CPU:对象的创建销毁,属性调整,布局计算,图片格式转换和解码,图像绘制.
  2. GPU:对纹理的渲染。
  3. 屏幕刷新
    屏幕成像:上面3步中,第一步CPU完成计算后,第二部GPU进行纹理渲染。这两步是CPU完成工作后,GPU才会进行工作,而第三步和前两步是处于不同的两条线程。当前两步完成时,第三提早发送信号或者晚发送信号距CPU和GPU完成工作时间间隔较长,就会发生卡顿。

卡顿优化

优化思路,尽量减少CPU,GPU资源消耗。

  1. 尽量使用轻量级的对象,能使用int,尽量不使用NSInterger,NSNumber,若是view没有点击事件尽量用CALayer替代View。
  2. 不频繁的使用frame,bounds,transform等属性,减少不必要的修改,AutoLayout会比直接设置frame消耗的资源多。
  3. 图片的Size最好和image的size一样大。
  4. 控制线程的最大并发量。
  5. 尽量把耗时操作放到子线程(文本处理尺寸计算,绘制;图片解码,绘制);
  6. 尽量避免段时间内大量图片的显示,尽可能将多张图片合成一张显示。
  7. 减少视图数量和层次,减少透明的图层,不透明的就设置opaque为YES。
  8. 尽量减少离屏渲染(渲染模式分两种:离屏渲染,当前屏幕渲染)。

卡顿检测

平时说的卡顿,主要是因为在主线程中耗时操作比较多,可以添加observer到Runloop中,通过runloop切换状态的耗时,达到监控卡顿目的

耗电优化

主要耗电来源

  1. CPU处理
  2. 网络,Networking
  3. 定位,location
  4. 图像,Graphics

优化

1. 少用定时器

2. I/O优化

网络优化

  1. 减少,压缩网络数据
  2. 如果多次请求的结果相同的,尽量使用缓存
  3. 使用断点续传,否则网络不稳定时可能多次传输相同的内容
  4. 网络不可用时,不要尝试网络请求
  5. 用户可以取消长时间运行或者数独很慢的网络操作,设置合适的超时时间。
  6. 批量传输,下载时一次性多下载内容,减少下载次数。

定位优化

  1. 如果只需快速确定用户位置,最好用CLLocationManager的requestLocation方法。定位完成后会让硬件断电。
  2. 如果不是导航应用,尽量不要实时更新位置,定位完就关掉定位服务
  3. 尽量降低定位精度,比如尽量不要用精度最高的kCLLocationAccuracyBest。
  4. 需要后台定位时,尽量设置pauseLocationUpdatesAutomatically 为YES,当用户不太可能移动时系统会自动暂停定位更新
  5. 尽量不要使用startMonitoringSignificantLocationChanges

硬件检测优化

用户移动,摇晃,倾斜设备时,会产生动作(motion)事件,这些事件由加速计,陀螺仪,磁力计等硬件检测,在不需要检测的场合,应及时关闭这些硬件。

启动优化

APP启动分两种

  1. dyld:Apple的动态链接器,可以用来装载Mach-0文件(可执行文件,动态库)。
  1. 启动APP时,runtime做的事情
  1. 总结
  2. APP启动由dyld主导,将苹果的.owen文件加载到内存
  3. 加载动态链接库,rebase 指针调整和bind符号绑定。
  4. Objc的runtime的分类和类的注册,selector唯一性检查;
  5. Objc的runtime初始化处理 :执行load方法,attribute修饰函数调用,创建C++全局变量。
  6. 所有初始化工作结束后,dyld就会调用main函数。
  7. 最后就是UIApplicationMain函数,AppDelegate的application:didFinishLaunchingWithOptions方法。

启动优化

dyld:

功能级别优化:
除首屏展示所需要的功能外,didFinishLaunchingWithOptions方法里尽量不要处理别的事情
方法级别优化:
耗时多的方法尽量放到子线程
检查耗时可以使用Time profile检查。

runtime:

  1. 用+initialize方法和dispatch_once取代所有的_attribute((constructor)),C++静态构造器,ObjC的+load
    main:
  2. 不影响体验前提下,尽可能将一些操作延迟,不要全部都放在finishLaunching方法中。

安装包瘦身

  1. 资源采取无损压缩
  2. 去除没有用到的资源
  3. 去掉异常支持:Enable C++ Exceptions、Enable Objective-C Exceptions设置为NO,other c Flags 添加 -fno-exceptions
  4. 检查未使用的代码。
上一篇 下一篇

猜你喜欢

热点阅读