ImはJSONからの画像リンクをダウンロードして、テーブルビューは、その細胞の作成を開始後、画像を作成する:更新表のセルの画像を非同期
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
}
そして、これはうまく動作しますが、テーブルビューが本当に遅くなりますレンダリングではなく、スクロール時に使用します。私はRAMとCPUをチェックし続け、両方とも実際には低いですが、私のネットワーク使用量は増え続けますが、イメージはすでにセルに載っていますので、すでに完了していることを意味します。 (このテストでは、JSONを2つの映画だけに呼び出すため、2つのイメージ)
これを実行する前に、私の合計ダウンロードは約200kb(イメージあり)でした。
何が間違っていますか?
ありがとうございます!もう一つの問題は、テーブルをリロードする必要がないということでした。画像はダースをダウンロードしていました(種類は明らかですが、最初はそれを見ませんでした)。 ありがとうマイケル! – Adrian
マイケルフォーレ私はこれが問題ではないことを知っていますが、私は問題があることを認識しています。私はdequeueReusableCellを使用しているので、セルを上下にスクロールして画像を再度ダウンロードします。ありがとう! – Adrian
私は 'NSCache'ドキュメントに@Adrianの画像をキャッシュします。それは非常に使いやすいです。別の質問を投稿した場合、私のUIImageキャッシングコードのスニペットを例として追加することができます。 –