前言
在我上面文章iOS简单优化Lottie-OC版源码内存占用降低50%以上,优化完毕OC版Lottie之后。我就着手开始了Lottie OC版本升级到Swift版本的工作。在升级的过程中发现由于Swift版本自带ImageProVider内部默认缓存了一个NSCache(这也进一步证实了我上篇文章提到的优化方案确实有有效的,也是推荐的),导致了我项目内部写的动态替换图片资源的方法失效了(即使自定义ImageProvider协议实现缓存也会无效的,因为Lottie内部NSCache是优先级最高的),基于这个问题,我开始了着手修改Lottie源码,并给官方提交了一次PR,令人意外的是经过一番修改后,官方人员最终同意了我的修改。Lottie是Airbnb公司开源的通过Json配置,跨多端的动画方案,lottie-ios在Github上有高达20多K的Star,第一次在那么多Star的开源库成功PR,说实话是有点开心的😄。下面是本次PR的记录。
代码修改
基于上面说的问题,我建议使用一个内部变量来控制是否允许内部缓存,并且允许在AnimationImageProvider协议中自己控制(默认True还是原来那样,只有自定义协议并且False掉,内部缓存则不会实现。
如果False,则使用自定义协议自身,不然走原先逻辑会包一层CachedImageProvider(内部自带一个NSCache优先走)。
审核过程
其实这个最终版本是审核大大建议我使用的,一开始我写的还是比较笨拙的(没有那么Swifty),还建议我跑一下格式化,最后全部修改完,审核大大就同意了,非常Nice😄。
还触发了审核大大的合著成就😄
结语
所以说如果大家用什么流行框架觉得有什么问题,可以尝试也提交一下PR。不用很高深的代码也是可以的,我这次的PR一共就改了几行代码,但是确实是一个容易让人忽略的场景。另外我上面说到的我是为了做Lottie动态替换资源(图片、文字)等才想到的,后面我也会把我内部做的动态替换Lottie封装类也开源出去,期待我的下一篇文章吧😄