J'ai une table qui affiche des informations sur une liste d'objets en cours de téléchargement. Chaque cellule contient un UIProgressView
qui est mis à jour en fonction de la progression de ce téléchargement. Mon problème est que pendant le téléchargement et la mise à jour de cette vue d'avancement, tout est très lent, et le CPU est surveillé à 100% ou plus dans le navigateur de débogage de Xcode.Une table avec des cellules qui ont toutes leurs propres vues de progression est très lente
Chaque objet est stocké avec sa propre propriété de progression.
class Download {
var id: String = ""
var progress: Float = 0
}
Et j'ai un tableau de ces derniers:
var downloads = [Download]()
Ceci est réglé sur le tableView
dans mon contrôleur de vue en utilisant cellForRowAtIndexPath:
en utilisant quelque chose le long des lignes de:
let download = downloads[indexPath.row]
cell.progressView.progress = download.progress
I J'utilise Alamofire
pour gérer mes téléchargements et en utilisant la fermeture de progression incluse, je suis en train de mettre à jour les progrès des téléchargements:
download.progress = Float(bytesRead)/Float(bytesExpected)
dispatch_async(dispatch_get_main_queue()) {
self.tableView.reloadData()
}
C'est à ce stade que je pense que le goulot d'étranglement se produit en raison du grand nombre de mises à jour qui se produisent. Pour essayer de limiter le problème, j'ai essayé de mettre à jour une seule cellule comme il a été changé:
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)
}
Cependant, je trouve que cela a causé tout pour aller encore plus lent.
Toutes les suggestions seraient grandement appréciées, merci d'avance!
Le problème est que vous rechargez toute la vue de table, au lieu de simplement mettre à jour UIProgressView. – almas