Swift中的操作队列NSOperationQueue

参考文章

文章主要讲述的是采用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的一些优化技巧

文章难度略高,需要在实践中反复体会!

    原文作者:JSCocoa
    原文地址: https://www.jianshu.com/p/5131d3a2e945
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞