iOS用MemCache

MemCacheクラスの外観の先史時代は簡単です。 ほとんどの場合、ネットワークから少量のデータをロードするプロジェクトが開発中です。 主にJSONデータと小さな画像。 各コントローラーで、クエリの結果が保存されるNSMutableDictionaryが宣言されました。 しかし、コントローラーの数の増加に伴い、2つの問題が発生しました。popViewControllerを呼び出すときのコードの重複とキャッシュ結果の損失です。



カットの下で、これらの問題の解決策。



プロジェクトをリファクタリングすることが決定され、その結果、MemCacheシングルトンクラスと、NSStringとNSObjectの2つのカテゴリが誕生しました。



MemCacheクラスは、短時間(このプロジェクトでは2分で十分)キャッシングを実行し、MemoryWarningが発生したとき、およびアプリケーションがバックグラウンドに切り替わったときにメモリを個別にクリアすることになっています。



記事の最後にソースへのリンクがありますが、ここでは実装の主要な段階について説明します。



initメソッドでは、メモリ警告とアクティビティの喪失に関する通知をサブスクライブします。

- (id) init { self = [super init]; if (self != nil) { NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; [center addObserver:self selector:@selector(clearCache) name:UIApplicationDidReceiveMemoryWarningNotification object:nil]; [center addObserver:self selector:@selector(clearCache) name:UIApplicationWillResignActiveNotification object:nil]; _lifeTime = 60.0f; } return self; }
      
      





deallocの通知のサブスクライブを忘れないでください。

 - (void)dealloc { NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; [center removeObserver:self name:UIApplicationDidReceiveMemoryWarningNotification object:nil]; [center removeObserver:self name:UIApplicationWillResignActiveNotification object:nil]; }
      
      





キャッシュは、要求時または上記のイベントの発生時にいつでもクリアできるため、新しい要素を記録するときは、実際に書き込む場所があるかどうかを確認する必要があります。 各要素について、追加されると、キャッシュから要素を削除するメソッドの遅延呼び出しを開始します。

 - (void)setValue:(id)value forKey:(NSString *)key { if (!_cache) { _cache = [[NSMutableDictionary alloc] init]; } [_cache setValue:value forKey:key]; [NSObject cancelPreviousPerformRequestsWithTarget:_cache selector:@selector(removeObjectForKey:) object:key]; [_cache performSelector:@selector(removeObjectForKey:) withObject:key afterDelay:_lifeTime]; }
      
      





使いやすさのために、カテゴリを使用しました。 キャッシュにオブジェクトを配置するには、次のように記述します。

 [jsonValue setMemCacheValueForKey:[[[connection originalRequest] URL] absoluteString]];
      
      





そして、次のようなオブジェクトを取得できます。

 id val = [[url absoluteString] memCacheValue];
      
      





リポジトリへのリンク-github.com/eltiren/MemCahce-IOS



PS ARCを有効にしてコンパイルしました。



All Articles