iOS的并发图像加载

时间:2011-03-22 16:22:04

标签: uiimage loading nsoperationqueue

我正在为iOS编写RSS阅读器应用程序。将有一个tableView,其中包含Feed中的文章列表。该tableView的每个单元格都将包含一个图像 - 文章的缩略图。我希望它能够加载最有效的方式:

  1. 最高优先级是可见缩略图。
  2. 如果可见的缩略图可以按正确的顺序加载:从顶部到底部,那就太好了。
  3. 不可见的缩略图也必须预先加载。但优先级最低。
  4. 如果加载不可见缩略图的顺序可能如下:从最近的(从顶部和底部到可见单元格)到最远的单元格将会很好。
  5. 每次tableView滚动时,它的单元格应根据其可见性和到可见区域的距离更新其加载优先级。
  6. 我有点卡住了使用的方法。最棘手的是(5)。这是必需的,因为app很可能用于窄带宽条件。所以app必须最好利用低连接速度。

    现在我有NSOperationQueue用于图像加载。 maxConcurrentOperationCount为2.加载NSOperations是非并发的(以Apple的术语表示),即在单独的线程中执行。每个NSOperation只是一个同步NSData的initWithContentsOfURL。这种方法的问题是我无法控制已经执行的加载操作。事件无法取消它们!

    理想的情况是,我可以随时更改ALL(包括已经执行)的加载操作的优先级。所以我正在考虑使用异步NSURLConnection加载切换到并发(用Apple的术语)NSOperations。这样我就可以通过查看didReceiveData之间的isCancelled prop来取消操作。我打算将该取消用于优先级降低的操作:存储已经通过操作加载的数据,取消它,以新的(较低的)优先级添加到队列并恢复下载。希望并发(用Apple的术语)操作不会减慢UI,因为加载任务不是CPU密集型的,并且可能有很长的滞后。

    此外,我不确定如何确定操作的优先顺序。由于NSOperationQueuePriority只有5个可能的值。即如何维护可见(从上到下)和不可见(从近到远)缩略图的加载顺序?

    请告知)

0 个答案:

没有答案