最近把《iOS开发高手》这一专栏的内容全部学完了,感觉受益匪浅,开阔了自己原来狭隘的技术栈视野。专栏讲述的都是与实际开发息息相关的内容,以 iOS 开发在各个阶段(开发、调试测试、发布和上线)中遇到的问题为切入点,讲解可以利用哪些技术、哪些方案来解决实际遇到的问题。是个很不错的课程,非常值得我们去学习。
接下来简单总结一下通过学习这一专栏,自己收获到的关键知识点,和一些能为我所用并且能很快地落地到自己项目中的技术。
-
APP启动速度的优化
对于这个问题,只有了解了APP在启动的过程中做了哪些事,才能对症下药。APP的启动主要包括三个阶段:
第一阶段main() 函数执行前,做的优化可以包含
1.减少动态库加载。如果使用动态库的数量较多时,尽量将多个动态库进行合并。
2.删除没有使用的类或者方法。
3.+load() 方法里的内容可以放到首屏渲染完成后再执行,或使用 +initialize() 方法替换掉。
4.控制 C++ 全局变量的数量。第二阶段 main() 函数执行后,做的优化可以有
梳理出哪些是首屏渲染必要的,哪些是 App 启动必要的,而哪些是只需要在对应功能开始使用时才需要的。将这些初始化功能分别放到合适的阶段进行。第三阶段首屏渲染完成后
严禁调用会阻塞主线程方法 -
Pod本地组件化
组件化的好处在于将业务完全解耦,将通用功能下沉,每个业务都是一个独立的 Git 仓库,每个业务都能够生成一个 Pod 库,最后再集成到一起。由于业务的完全解耦,团队再也没必要花费大量的时间在沟通和定位排查上面。 -
无痕埋点方案
无痕埋点利用了Runtime的Method Swizzling技术来实现。很好的解决了代码埋点和可视化埋点带来的工作量大、后期难以维护的问题。 -
利用 RunLoop 原理去监控卡顿
原理其实也很简单,只要监听Runloop的kCFRunLoopBeforeSources 和 kCFRunLoopAfterWaiting这两个状态在设定的阈值(合理的时间)内没有发生改变即可判断为卡顿。这个时候再收集方法的调用堆栈信息,通过调用堆栈信息就可看出是在调用哪些方法的时候发生了卡顿。 -
实用的第三方工具和类库
1.使用OCLint、Infer、Clang 静态分析器来协助我们在编写代码的阶段就能及时发现代码错误
2.使用PLCrashReporter、Fabric或者Bugly来监控崩溃。
3.使用A/B 测试来增强自己 App 的竞争力。
4.利用PromiseKit构建底层的发布和订阅事件总线