2017-09-12 4 views
0

私は、UITableViewのセルで画像をダウンロードする方が良いということについて、この議論を取り上げました。UITableViewのセルに画像をダウンロードするベストプラクティス? iOS/Swift

cellForRowAtIndexには、画像を非同期でダウンロードして、複数のスレッドと複数のネットワーク要求を使用してバッテリの放電の問題が発生する可能性があります。

もう1つの方法は、1つのスレッドと1つのネットワーク要求を使用して、すべてのイメージを一度にダウンロードし、cellForRowAtIndexの外側にあるすべてのイメージのURLをループしてから、テーブルビューのリロード機能を呼び出します。

後者のアプローチでは、各イメージがダウンロードされるとすぐに(reload関数を呼び出すことによって)各イメージを設定することもできます。

これを処理する業界標準の方法は何ですか?パフォーマンスに関しては特に賛否両論は何ですか?より良い方法はありますか?

+0

が遅いダウンロードプロセスにつながる、私は 'SDWebImage'または' 'Alamofire'のKingFisher'かのように、あなたが証明したサードパーティのライブラリのいずれかを使用することをお勧めあなたが望むものがありません –

+1

イメージをダウンロードするだけで、同じ量のイメージをダウンロードするのではなく、同期してバッテリーを非同期的に消費するのはなぜですか? –

+0

この申し立ては、Googleおよび業界の他の大手企業によって行われたベンチマークの結果であると言われました。私はそれがネットワークチップを何度も目を覚ますことと何か関係があると思いますか? – Tarek

答えて

1

私は一般的にSDWebImageを使用します。イメージをキャッシュし、後で再利用することができます。その拡張機能とさまざまな方法で柔軟性を提供します。

私の実装コードを確認してください:一つだけのスレッドを使用して

import UIKit 
import SDWebImage 

extension AcceptedWinksViewController: UITableViewDataSource { 
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: Constants.CellIdentifier.WinkListTableViewCell) as! WinkListTableViewCell 
     let profile = self.winkList[indexPath.row] //Model 
     let placeHolderImage = UIImage(named:"placeHolder") //your placeholder image, can be class or global variable 
     if let url = profile.imageURL { 
      cell.userImageView.sd_setImage(with: url, placeholderImage: placeHolderImage, options: .refreshCached, completed: nil) //check its various options 
     } 
     else { 
      cell.userImageView.image = placeHolderImage 
     } 
     return cell 
    } 
} 
+0

はい、これは画像のキャッシュには適していますが、最初のダウンロードの処理はどうですか?非同期に処理するかどうか – Tarek

+0

はい、非同期に処理し、イメージURLに基​​づいてイメージのダウンロードキューを作成します。理解を深めるためにsdkコードを参照してください –

関連する問題