4

当我们使用集合视图单元格时,我们正在努力取消已经发送的请求..(我不是在谈论我们想要取消请求的情况,因为我们已经发送了相同的请求)......我想我们需要使用这些方法: cancelRequestForRequestReceipt .. 问题是不清楚如何获得这个RequestReceipt。

例子:

我们有一个包含不同图像的集合视图(每个图像都有不同的 url).. 如果我将快速前后滚动,方法 af_cancelImageRequest 将完成这项工作,并且不会为相同的 url 创建 2 个活动请求.. 超级!,问题是当我们尝试只滚动到 1 个方向并且我们有 1000 张图像时.. 基本上我们希望能够在图像返回之前取消刚刚发送的请求,这意味着我们没有图像并且我们没有't AlamofireImage 继续该请求......在单元格消失后(由于互联网速度慢和巨星滚动)......所以,如果我做对了,我们可以使用 cancelRequestForRequestReceipt ......问题是我们不能找到如何获得这个 RequestReceipt ...

顺便说一句:我看到了 AlamofireImage 演示应用程序的示例代码,

override func prepareForReuse() {
    super.prepareForReuse()

    imageView.af_cancelImageRequest()
    imageView.layer.removeAllAnimations()
    imageView.image = nil
}

正如我所说,只有当请求已经在操作队列中时,此代码才会取消对图像的请求。

帮助 :)

4

1 回答 1

1

我认为你误解了AlamofireImage在这个例子中是做什么的,但首先让我们了解这个prepareForReuse方法是做什么的。

每次单元格要出列时,都会调用此方法,这意味着,例如,如果您说您快速向前和向后滚动,则将调用此方法,如果您在一个方向上快速滚动n幅图像,则将调用此方法每次一个细胞消失。

当您在 中调用该方法并在其中UIImageView存在一个引用时,UITableViewCell您不需要 ,RequestReceipt因为该请求将为您取消。

在您快速前进和后退的情况下,正确的处理方式不是在油门防止这种行为后取消它。

AlamofireImage它是一个非常棒的库,但我认为您可以使用KingFisher获得更多好处,它会在快进和快退的情况下为您处理节流阀,当然还有其他情况下的单元格出列并且请求未完成。

尽管如此,这个库会为您处理所有繁重的工作,并且您无需重新发明轮子

我希望这对你有帮助。

于 2016-09-12T04:05:44.443 回答