【发布时间】:2016-06-25 15:59:16
【问题描述】:
我有一个表格,其中显示有关正在下载的对象列表的信息。每个单元格都包含一个UIProgressView,它会根据下载的进度进行更新。我的问题是,在这个进度视图的下载和更新过程中,一切都很慢,在Xcode的debug navigator中监控CPU是100%以上。
每个对象都存储有自己的进度属性。
class Download {
var id: String = ""
var progress: Float = 0
}
我有一个数组:
var downloads = [Download]()
在我的视图控制器中使用cellForRowAtIndexPath: 将其设置为tableView,使用类似于:
let download = downloads[indexPath.row]
cell.progressView.progress = download.progress
我正在使用Alamofire 管理我的下载并使用包含的进度关闭,我正在更新下载的进度:
download.progress = Float(bytesRead) / Float(bytesExpected)
dispatch_async(dispatch_get_main_queue()) {
self.tableView.reloadData()
}
在这一点上,我认为由于发生了大量更新,瓶颈正在发生。为了尝试限制问题,我尝试在更改时仅更新单个单元格:
let rowIndex = self.downloads.indexOf() { $0.id == download.id }
let indexPath = NSIndexPath(forRow: rowIndex!, inSection: 0)
dispatch_async(dispatch_get_main_queue()) {
self.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .None)
}
但是我发现这会导致一切变得更慢。
任何建议将不胜感激,在此先感谢您!
【问题讨论】:
-
问题是你正在重新加载整个表格视图,而不是仅仅更新 UIProgressView。
标签: ios swift uitableview alamofire uiprogressview