Upgrade to Pro — share decks privately, control downloads, hide ads and more …

FtnApp 的缩略图实践

FtnApp 的缩略图实践

Frank Xu

August 26, 2012
Tweet

More Decks by Frank Xu

Other Decks in Programming

Transcript

  1. QMCache thumb.db file original file web thumbnail 难点: 两种 IO

    操作 两个网络操作 相互嵌套 本地 ➜ 原图 ➜ 网络
  2. GCD VS OperationQueue GCD 保留作用域,线程池 不好控制并发任务,不好取消 NSOperationQueue w/ NSBlockOperation FIFO,封装了

    GCD,可配置并发数,支持取消 保留还在队列里的 URL,避免重复的操作 快速滑动时,取消未开始的任务,优先留给当前页
  3. 大图滑动 V1 图片和 loadingView 分开两个数组 未渲染部分用 [NSNull null] 占位,提前创建 好N个

    loadingView 检查是否 [NSNull class] 来判定是否需要加 载 scrollViewDidEndDecelerating 时加载 每次加载时创建 view,加载过的不会释放
  4. 大图滑动 V2 不采用单独的 loadingView 数组和 [NSNull null] 用 zoomingScrollView 来引用

    loadingView 跟 image View的缓存和回收 NSMutableSet 无序,NSObject 不重复 visiblePages / recyclePages
  5. 大图滑动 V2 scrollViewDidScroll 判定当前可见的页(<=2) 如果需要绘制,从 recyclePages 里 dequeue ⼀一个放到 visiblePages

    回收不可见的页,从 visiblePages 里挪到 recyclePages 如果不需要绘制,什么都不做
  6. Next? 大图内存没有尽快释放 [obj release] 只是引用-1,并没有马上释放 采用小图策略,DB 保存等比小图 ⼀一次加载到内存,内存只缓存小图 (20k *

    100) 快速滑动时拉伸小图,模糊,但是快 scrollViewDidEndDecelerating 时绘制大图 view 不可见时马上清大图 image = nil;