2017-05-11 4 views
0

何かを修正する方法が残っています。私は現在、Instagramという文字通りのiPhoneアプリを持っていますが、ユーザーは友人の写真を見ることができます。コレクションビューで画像をキャッシュする

私はfirebaseからイメージを取得し、それらを配列に配置する関数を作成しました。これで、共有URLSessionを実行すると同時にうまくいきます。私は、私のアプリケーションがメモリ使用量が高くなっていることに気付いたので、URLcacheを追加し、それがどれくらい大きくなるかについての制限を設定しました。しかし、私はまだ高いメモリ(171メガバイト)を取得しています - それは、私はデータの権利をキャッシュしていないように見えるようにする4画像の使用量をロードしているだけです。

私はまだURLSessionsの操作方法やキャッシング方法を学んでいますので、間違って設定すると問題になるかもしれません。オンラインの人々はSDWebImageを使用していると言っていましたが、実際には、最初のページングが有効になっているため、また水平になっているため、スクロールしたりスクロールダウンしたりすることはありません。ここで私のコードのいくつかを教えてください。どうすればいいと思いますか教えてください。

urlcache in 
viewDidLoad() { //probably too high.. 
    let memoryCapacity = 500 * 1024 * 1024 
    let diskCapacity = 500 * 1024 * 1024 
    let urlCache = URLCache(memoryCapacity: memoryCapacity,  diskCapacity: diskCapacity, diskPath: "myDiskPath") 
    URLCache.shared = urlCache 
} 
// cellforrow 
if posts.count != nil { 
     let pozt = posts[indexPath.row].pathToImage 
     let url = URL(string: pozt!) 
     URLSession.shared.dataTask(with: url!, completionHandler: { (data, response, error) in 
      if error != nil { 
       print(error?.localizedDescription as Any) 
       return 
      } 
      DispatchQueue.main.async { 
       cell.myImage.image = UIImage(data: data!) 
       self.loader.stopAnimating() 
      } 
     }).resume() 
    } 
    cell.myImage.image = UIImage(named: imaqes[0]) 
    return cell 
} 
+0

を役に立てば幸いそれは?役立っている:)私は意味 –

答えて

0

ほとんどのプログラマーは、ライブラリを使用してイメージをキャッシュしています。 私はSDWebImageの代わりにKingFisherを使用します。その軽量で使いやすい。インストールするには

Podfile:ターミナルで

pod 'Kingfisher' 

pod install 

迅速なファイルで::あなたのケースでは

import Kingfisher 

次の方法でそれを使用します

// cellforrow 
if posts.count != nil { 
    let pozt = posts[indexPath.row].pathToImage 
    let url = URL(string: pozt!) 

    DispatchQueue.main.async { 
     cell.myImage.kf.setImage(with: url!) //Using kf for caching images 
    } 
} 

return cell 
ローダを削除するには、comletion handlerで .kf.setImageを使用する必要があります。あなたはその考えを得るべきです。

は、それが

+0

いや、私はこれは私が探していますおそらく何だと思います –

関連する問題