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的一些优化技巧

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容