Im die Bildverbindung von einem json herunterzuladen und dann das Bild erzeugt wird, sobald die Tabellenansicht seine Zellen beginnen zu schaffen:aktualisiert Tabellenzelle Bild asynchron
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TableViewCellController
DispatchQueue.main.async(execute: {() -> Void in
if let url = NSURL(string: self.movies[indexPath.row].image)
{
if let data = NSData(contentsOf: url as URL)
{
let imageAux = UIImage((data: data as Data))
cell.movieImage.image = imageAux
self.tableView.reloadData()
}
}
})
cell.name = self.movies[indexPath.row].name
cell.date = self.movies[indexPath.row].date
return cell
}
Und das funktioniert gut, aber die Tabellenansicht wird wirklich langsam, nicht beim Rendern, sondern beim Scrollen. Ich überprüfe den RAM und die CPU und beide sind wirklich niedrig, aber meine Netzwerknutzung steigt weiter, aber die Bilder sind bereits auf der Zelle, so dass es bereits fertig ist. (Für diesen Test im Aufruf des JSON für nur 2 Filme, also 2 Bilder)
Bevor ich anfing dies war mein Gesamtdownload etwa 200kb (mit Bildern), jetzt wird es über 2MB, bevor ich das Projekt zu stoppen.
Was mache ich falsch?
Vielen Dank! Ein weiteres Problem war, dass ich den Tisch nicht neu laden musste, damit die Bilder dutzende Male heruntergeladen wurden (irgendwie offensichtlich, aber ich sah es zuerst nicht). Vielen Dank Michael! – Adrian
Michael Fourre Ich weiß, dass dies nicht die Frage war, aber ich merke, dass ich ein Problem habe, da ich jedes Mal, wenn ich die Zelle hoch- oder runterscrolle, die Bilder wieder aus der Warteschlange bringe, wie könnte ich das vermeiden? Vielen Dank! – Adrian
Ich würde die Bilder zwischenspeichern @Adrian Blick in die 'NSCache' Dokumentation. Es ist ziemlich einfach zu benutzen. Wenn du eine andere Frage postest, könnte ich ein Snippet von meinem UIImage Caching Code als Beispiel hinzufügen –