文章主要讲述的是采用NSOperation和NSOperationQueue优化图片下载和图片处理的过程,使tableView在滑动过程中更加流畅。
整个过程描述:从dataSource下载图片url字典,key和value分别对应的为图片的name和url。根据url下载图片,经过处理后显示在tableView的cell里。
可从以下几点着手优化:
- 图片的下载和处理均置于background,每个operation完成后在主线程reload tableView indexPath
- 图片下载完成后即可显示,已达到更好的UI Response
- 监测tableView的滚动,通过tableView的可见cells来决定当前的下载和处理任务,优先处理可见cells
要达到以上优化目的,需要:
- 定义一个图片类Photo,用来存储图片的name,url,image,同时记录图片的下载和处理状态,根据不同的状态tableView加载cell时可以执行不同的operation
- 定义两个NSOperation的子类,downloadOperation和filterOperation,对每个Photo进行处理操作
- 维护两个队列和两个字典,队列可以add operation,字典[indexPath:NSOperation],以便通过indexPath找到对应的downloadOperation和filterOperation
- tableView滚动时挂起所有队列,停止滚动时,根据可见cells来计算toBeCancelled和toBeStarted的indexPath
整篇文章意在让我们了解和掌握以下知识点:
- task、thread、progress的概念
- NSOperationQueue和GCD的对比
- NSOperation子类的定义、使用
- NSOperationQueue的定义、维护
- 有关tableView的一些优化技巧
文章难度略高,需要在实践中反复体会!