iOS 开发 - 衡量图片加载及优化思路

图片展示是移动端开发非常重要的功能, 从展示 App 内置的图片到 Instagram 这样的图片 Feed 流应用, 图片加载消耗了巨大的带宽, 占用手机大部分的内存, 也在指尖的滑动过程中不断消耗着 CPU 资源. 本文将以优秀的开源库 SDWebImage 为例, 从开发的角度来衡量图片加载这一功能, 并会涉及到缓存/解码/图片格式等问题的研究, 从而引出后续优化方案.

阅读全文 »

MessageThrottle 结合业务需求的修改

MessageThrottle 是什么, 解决了什么痛点

MessageThrottle 是使用 Objective-C 实现的 iOS 函数节流(Throttle)和防抖(Debounce)的工具库. 在实现 App 交互的时候, 逻辑的刷新太频繁会导致性能上的问题, 比如不断有新的数据加载导致列表一直在刷新, 按钮的点击速度太快导致逻辑被多次执行, Slider 或者 滑动手势等频繁回调导致性能跟不上, 数据一直在变化导致耗费诸多性能在中间状态上等. 在业务层, 我们经常要结合业务来做限频或者定时刷新等逻辑, 来解决上面这些问题, 但是 MessageThrottle 提供了新的思路, 在不耦合业务逻辑的情况下, 实现间隔性消息调用, 即函数节流(Throttle)和防抖(Debounce).

使用 MessageThrottle, 只需如下简单的代码

阅读全文 »

崩溃???

今天在开发一个列表需求, 由于有非常多因素导致列表变化, 所以需要方法节流(throttle), 直接使用了MessageThrottle 这个第三方库. 然后由于需求本身也使用了 ReactiveObjC 来开发, 当页面的 vm 跟 RAC 绑定, 然后又使用 MessageThrottle 时, 退出页面, RAC开始了释放逻辑, 而 MessageThrottle 防抖模式下, 延时执行被”节流”的方法, 最终导致应用崩溃.

阅读全文 »