【问题标题】:One NSOperationQueue per cell or per UIViewController?每个单元或每个 UIViewController 一个 NSOperationQueue?
【发布时间】:2016-07-14 07:51:33
【问题描述】:

我有一个 UITableView,当单元格出现时,我会从远程服务器上一一下载数据。

每个单元创建一个 NSOperationQueue 是否安全?我担心这可能会引发线程爆炸(如果线程太多)。 每个单元实例都有 NSOperationQueue 更容易开发,因为一旦单元被重用,我可以取消对 NSOperationQueue 的所有操作。

相反,如果我为每个 UIViewController 使用一个 NSOperationQueue,那么我可以将 NSOperationQueue 传递给单元,并且单元可以将其 NSOperation 添加到该队列中。但是,我需要以某种方式进行处理,以便在单元格被重用时取消该操作(将对 NSOperation 的引用存储在 UIViewController 内的字典中等)。

大多数教程在 UIViewController 中都有一个 NSOperationQueue,但我见过一个他为每个单元格使用一个 NSOperationQueue。

【问题讨论】:

  • 嘿@MikeAlter 你还有其他原因吗,不仅仅是因为Apple示例代码使用了这种方法,或者其他教程也使用了这种方法?谢谢
  • 我已经实现了那个例子,ws调用和图片下载的方式很棒而且性能友好

标签: ios uitableview concurrency nsoperation nsoperationqueue


【解决方案1】:

在下面给出的教程中,根据您的要求提供取消操作和恢复操作的选项。

Ray Wenderlich 的一个很好的例子http://www.raywenderlich.com/19788

更新:

如果您在UITableView 中使用过NSOperationQueue,那么您需要妥善管理。例如 AFNetworking 库已经使用 NSOperationQueue 从 url 和其他工作正常的任务下载图像。所以我的建议是,如果你想在UITableView 中使用NSOperationQueue,那么请妥善管理它,否则它肯定会导致将来处理长数据时出现问题。

【讨论】:

  • 感谢您的回复。但我不是在问如何做到这一点。我想知道哪种方式更好,以及对每个单元格使用 NSOperationQueue 是否存在危险。
  • 我希望你意识到一个单元格可以并且将会在表格视图中显示许多不同的行,所以每个单元格一个 NSOperationQueue 可能无法达到你想要的效果。
  • @gasher729 这个可以实现。如果您查看问题描述,我在那里描述了如果单元被重用,我将取消单元的 NSOperationQueue 的所有操作。因此,即使它在开始时显示第 1 行,并且第 1 行的 NSOperation 正在进行,如果它离开屏幕然后被第 10 行重用,第 1 行的 NSOperation 将被取消,我为第 10 行添加新的 NSOperation .
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 2012-03-24
  • 1970-01-01
  • 1970-01-01
  • 2014-01-04
  • 2023-03-09
相关资源
最近更新 更多