gpt4 book ai didi

ios - 异步获取完成 : Is cell still being displayed?

转载 作者:行者123 更新时间:2023-11-28 10:57:39 26 4
gpt4 key购买 nike

在最近的一次采访中,有人问我这样的场景 #9这些关于将图像异步下载到表格 View 单元格中的常见面试问题。我理解在 cellForIndexPath 中异步调用它的必要性,但我对如何在异步调用完成后检查单元格是否仍在 View 中感到困惑(请参阅下面的项目符号 #3 摘录)。换句话说,在异步调用之后,我如何确定我为其获取数据的表格单元格是否仍在 View 中。

When the image has downloaded for a cell we need to check if that cell is still in the view or whether it has been re-used by another piece of data. If it’s been re-used then we should discard the image, otherwise we need to switch back to the main thread to change the image on the cell.

最佳答案

您应该使用回调机制开始在后台下载图像,该回调机制可以决定图像在加载后是否仍应显示。

一个选项是继承 UIImageViewUITableViewCell 并存储对图像的 NSURL 的引用。然后,当您的回调被调用时,您可以检查 ImageView 或单元格的缓存 URL 是否是您拥有的图像之一,并决定是否显示它。

我不推荐:

  • 依赖于 View 的标签,因为它需要某种 NSURL 和整数之间的关联表,这需要一个管理器对象并且无助于代码的可重用性
  • 依赖单元格的索引路径,因为在网络请求发生时可能会更新表或单元格以重用于其他索引路径

Associated Objects, by NSHipster 中描述了一个更高级的选项:

When extending the behavior of a built-in class, it may be necessary to keep track of additional state. This is the textbook use case for associated objects. For example, AFNetworking uses associated objects on its UIImageView category to store a request operation object, used to asynchronously fetch a remote image at a particular URL.

关于ios - 异步获取完成 : Is cell still being displayed?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42386272/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com