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

FtnApp 的缩略图实践

FtnApp 的缩略图实践

Avatar for Frank Xu

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;