2017-01-16 12 views
1

したがって、私はこのニュースフィード構造を持っています。すべてのニュースブロックはカスタムUITableViewCellです。現在、すべてのカスタムセルには画像が表示されるCollectionViewがあります。カスタムUITableViewCellの一部であるCollectionViewCellイメージをキャッシュする方法

enter image description here

問題は、スクロール、およびニュースセル(ニュースブロック)が見えて来るとき、CollectionViewがリロードされていることである - セルが現れるたびに。私はメインのViewController側にそれらの画像をキャッシュする方法を見つけようとしています。

最高のアプローチは何ですか?

答えて

0

あなたのUIImageのインスタンスをキャッシュする必要があり、そう、あなたが任意のソースからいくつかの写真を取得する場合、あなたは以下のような何か書くかもしれない:私は推測

/* some code before */ 
UIImage *yourImage = /* Get your UIImage from any available way */ 
[self.cache setObject:yourImage forKey:@"SomeUniqueID"]; 
/* some code after */ 

を、このコードは関数としても大きくなります、これはUIImageのインスタンスを取得し、そのIDをパラメータとして取得します。

私の意見では、画像を保存する最も一般的な方法です。サードパーティのフレームワークでオーバーヘッドなしでより熟練した方法が必要な場合は、NSCacheに関するドキュメントを読むことができます。

しかし、一般的に、あなたはどのようにあなたのイメージを保存するさまざまな方法がたくさんあります。

  1. はディスク
  2. から画像を使用して、
  3. メモリからの変種のいずれかを画像をゲットしかし、それらを離れてまだいくつかを使用して軽量&フレキシブルフレームワーク、あなたはGitHubでたくさん見つけることができます。

私が上に書いたコードは、画像をメモリキャッシュに格納するだけです。

+0

答えをありがとう。私はその考えを得た。 UIViewControllers(NSUserDefault ..のようなもの)の向こう側にNSCacheメモリが動作していますか? – ekashking

+0

@ekashkin NSCacheの構文はNSUserDefaultsと似ています。キャッシュに保存する必要があるすべてのオブジェクトは、UIImageのようにNSSecureCodingプロトコルを実装する必要があります – Hamsternik

1

この種のジョブに独自のキャッシュ/ディスク/メモリハンドラを実装しないようにするには、AFNetworkingまたはSDWebImageを使用することを強くお勧めします。

画像とそのキャッシュを設定する方法についてSDWebImageの例:

[imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"] 
      placeholderImage:[UIImage imageNamed:@"placeholder.png"]]; 

これは自動的にあなたのためのすべてのキャッシュ/ディスク/メモリを処理します。

//設定したメモリサイズの制限(高い値に設定するときにメモリエラーを回避するために古いデバイスに確認してください:ここで

あなたはSDWebImageでキャッシュを処理する方法の一例です。)

[[SDImageCache sharedImageCache] setMaxMemoryCost:****]; 

//クリアディスクキャッシュ

[[SDImageCache sharedImageCache] clearDiskOnCompletion:^{ 
}]; 

//メモリキャッシュのクリア

[[SDImageCache sharedImageCache] clearMemory]; 

私はNSUserDefaultsから離れて滞在するか、画像を設定し、上記の例では、辞書にまたは配列メモリエラーやアプリケーションのクラッシュ/パフォーマンスを避けることができます。

関連する問題