gpt4 book ai didi

ios - UITableView 在显示图像 Swift 时滞后

转载 作者:搜寻专家 更新时间:2023-10-31 08:16:43 29 4
gpt4 key购买 nike

我有一个在单元格中显示图像的 tableView,我在 viewDidLoad 函数中获取数据

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableview.dequeueReusableCellWithIdentifier("cardSelectionCell", forIndexPath: indexPath) as! MyCell
let card = fetchedResultsController.objectAtIndexPath(indexPath) as! Card
cell.Name?.text = card.name
var image: NSData = card.photo as NSData
cell.logo.image = UIImage(data: image)
let date = NSDate()
let formatter = NSDateFormatter()
formatter.timeStyle = .MediumStyle
cell.policyExpiryDate.text = formatter.stringFromDate(date)
return cell
}

但问题是当我开始滚动时,tableView 非常卡顿所以我尝试创建一个字典来转换 viewDidLoad()

中的图像
var imageDictionary = [Card:UIImage]()


AllCards = context.executeFetchRequest(request, error: nil) as! [Card]
for card in AllCards {
imageDictionary[card] = UIImage(data: card.photo as NSData)
}

tableView 函数中:

cell.logo.image = imageDictionary[card]

但它仍然滞后

还有一个问题:如果将一张卡片添加到核心数据中,我必须再次获取图像数组,所以我尝试在 viewDidAppear() 中创建数组,但图像没有出现在第一次加载中,tableView 仍然滞后。

最佳答案

首先,它实际上取决于图像的大小:

var image: NSData = card.photo as NSData
cell.logo.image = UIImage(data: image)

这条线可能很重。您可以像这样轻松测量它,例如:

let time1 = CACurrentMediaTime()
var image: NSData = card.photo as NSData
cell.logo.image = UIImage(data: image)
print(CACurrentMediaTime() - time1)

如果它花费的时间比您应该优化的时间长(例如超过 8 毫秒)。您可以通过多种方式实现它,例如,您可以将 UIImage 引用存储在某个字典或数组中,然后在 cellForIndexPath: 中继续显示。另一种方式是去AsyncKit方式 - 使您的 UI 异步,在一个线程中加载数据并将其传递给仅在主线程上绘制。现在您处理的所有内容都在主线程中。

UPD:我认为在这种情况下最好的方法是存储图像的路径,然后在后台进程中运行 UIImage 调整大小并返回预览。您还可以为调整大小和未调整大小的 UIImage 创建缓存,路径或 URL 可以是一个键 - 因此下次只需从缓存中获取 UIImage 就不会再次启动所有调整大小过程。

还应该注意这个操作:

cell.logo.image = UIImage(data: image)

创建一个系统缓存并可以在内存中进行大量分配,因为垃圾收集器不会立即将其杀死,就像 UIWebView 的情况一样。所以你可以像这样在你的函数周围添加你自己的自动释放池:

autoreleasepool { () -> () in
cell.logo.image = UIImage(data: image)
}

关于ios - UITableView 在显示图像 Swift 时滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33798856/

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