我正在使用NSCache
存储UIImage
对象。我使用UITableView
来显示图像并以以下方式访问NSCache
:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: CellIdentifiers.ImageTableCell, for: indexPath) as! ImageTableViewCell
let brand = brands[indexPath.row]
cell.centerLabel.text = brand.brand
cell.leftImageView.image = nil
if let image = self.brandLogosCache.object(forKey: brand.id as NSString) {
cell.leftImageView.image = image
} else if noLogosBrands.contains(brand.id) {
return cell
} else {
ImagesManager.getBrandLogo(byLogoName: brand.logo!) { (error, imageData) in
guard error == nil else {
print("Could not get logo")
return
}
if let image = UIImage(data: (imageData?.data)!) {
self.brandLogosCache.setObject(image, forKey: brand.id as NSString)
DispatchQueue.main.async {
self.brandsTableView.reloadData()
}
} else {
print("Could not form logo from incomming data")
self.noLogosBrands.insert(brand.id)
}
}
}
return cell
}
我也有extension
的{{1}}符合UIImage
。它的实现只是为了具有一致性,因为如果我不知道它的内容,它将在后台运行的应用程序中被丢弃:
NSDiscardableContent
问题是我一直都在丢弃内容,并且它不会停止丢弃,下载图像,保存图像并再次丢弃它们。我在应用程序的其他地方使用了NSCache,没有这个问题。可能是什么原因?