我从file.txt
获得了NSData,当我从Core Data
转换为NSData
时,它使我的UITableView滚动速度非常慢。在将图像存储到UIImage
之前,我已经调整了图像大小。有没有好办法做到这一点。起初,我想使用Core Data
,但似乎没有这种方法来实现这一点。
Kingfisher
答案 0 :(得分:1)
你的问题不是转换速度很慢,而是滚动时它已经完成了很多次。
为了优化UITable,iOS不会为n行创建n个单元格。它创建了x + 2个单元格(IIRC),其中x是可见单元格的数量。
当调用cellForRowAt时,调用dequeueReusableCell,它接受一个空闲单元格并将其分配给该行。这样,当您滚动时,不会发生对象的初始化,并且会减慢向下滚动。
您的代码(现在很明显)的问题在于,在将单元格分配给行之后,您再次转换图像并对其进行初始化。
您应该做的是提前初始化图像数组,例如在viewDidLoad中。然后你的代码看起来像:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cellIdentifier = "ListTableViewCell"
guard let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as? ListTableViewCell else {
fatalError("The dequeued cell is not an instance of MealTableViewCell.")
}
//cell.imageContentPhoto.kf.setImage(with: url)
cell.imageContentPhoto.image = imagesArray[indexPath.row] // or something similar
return cell
}
当然,如果你有很多不同的图像,可能值得做一些延迟加载。滚动时保留占位符图像,停止时仅加载相关图像。这当然要复杂得多,并留给学生练习。