我在这里阅读了很多answers,说通过使用AlamofireImage辅助方法(例如af_setImageWithURL()
)或任何等效的库,您不必担心单元重用的事情(此外,许多已发布的教程实际上就是这样做的)。也就是说,我不必保留对单元格的弱引用,也不必通过在后台下载完成后使用tableView的cellForRowAtIndexPath()
方法来更新其imageView来获取该单元格,就像我们通常手动执行请求一样。
首先,这是真的吗?如果是这样,那么它是如何在库中完成的,导致我尝试跟踪AlamofireImage的af_setImageWithURL()
代码,而我却找不到任何努力来确保我们仍在处理发出请求的同一单元格上。我想念什么吗?
听起来很傻,很抱歉,但是我真的很困惑。
最佳答案
假设您在谈论UIImageView
类别,是的,它确实解决了许多困扰天真的异步图像检索问题的问题,即:
NSIndexPath
已更改的事实不会影响该单元格的image
的异步更新。 af_setImageWithURL
时,对先前与此重用单元格关联的先前行的请求将被取消。对于AlamofireImage可能无法像我们期望的那样优雅处理的
UITableViewCell
问题,它包括:NSURLCache
,而不是通过NSCache
或本地持久性存储进行自己的缓存。虽然我理解了作者为什么这样做(有一定的直观吸引力,但NSURLCache
应该能够优雅地做到这一点),但您应该意识到NSURLCache
可能会出现问题,只能按照文档记录不多的规则进行缓存(如果资源超过5个占总缓存大小的百分比,它不会被缓存;如果HTTP header 不太正确,它将不会被缓存,等等)。因此,在缓存问题上必须格外小心。 最重要的是,使用
UIImageView
类别时说“您不必担心单元重用的东西”是一种夸大的说法。您仍然需要仔细设计单元重用逻辑,例如:NSURLCache
在您所处的环境中正确缓存; 但是,确实,执行良好的
UIImageView
类别可以避免过于简单的异步图像检索例程的许多陷阱。但这不是 Elixir 。关于ios - 在UITableViewCell内部使用AlamofireImage,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34403664/