我正在为 iOS 编写一个 RSS 阅读器应用程序。将有一个表格视图,其中包含提要中的文章列表。该 tableView 的每个单元格都将包含一个图像 - 文章的缩略图。我希望它以最有效的方式加载:
- 最高优先级是可见缩略图。
- 如果可以按正确的顺序加载可见的缩略图会很好:从上到下。
- 不可见的缩略图也必须预先加载。但优先级最低。
- 如果不可见缩略图的加载顺序可以如下所示,那就太好了:从最近(从顶部和底部)到可见单元格到最远的单元格。
- 每次 tableView 滚动它的单元格都应该根据它们的可见性和到可见区域的距离来更新它们的加载优先级。
我有点卡住使用什么方法。最棘手的是(5)。之所以需要它,是因为应用程序可能会在窄带宽条件下使用。所以应用程序必须尽量利用低连接速度。
现在我有 NSOperationQueue 用于图像加载。maxConcurrentOperationCount 是 2。加载 NSOperations 是非并发的(用 Apple 的话来说),即在单独的线程中执行。每个 NSOperation 只是一个同步的 NSData 的 initWithContentsOfURL。这种方法的问题是我无法控制已经执行的加载操作。无法取消它们!
理想的情况是我可以随时更改所有(包括已经执行的)加载操作的优先级。所以我正在考虑切换到具有异步 NSURLConnection 加载的并发(用苹果的术语)NSOperations。这样我就可以通过查看 didReceiveData 之间的 isCancelled 属性来取消操作。我计划将取消操作用于优先级降低的操作:存储已由操作加载的数据,取消它,将新的(较低)优先级添加到队列中并恢复下载。希望并发(以 Apple 而言)操作不会减慢 UI,因为加载任务不是 CPU 密集型的,并且可能有很高的延迟。
另外我不确定如何确定操作的优先级。由于 NSOperationQueuePriority 只有 5 个可能的值。即如何保持加载可见(从上到下)和不可见(从近到远)缩略图的顺序?
请指教)