1. 程式人生 > >【iOS】利用NSCache提升效率

【iOS】利用NSCache提升效率

遇到一個問題是,在使用大量圖片的app中,需要從儲存裡面讀取資料,每次都從檔案系統裡面讀取檔案會造成卡頓現象。

解決辦法就是把NSData物件快取起來,先從NSCache裡面讀取資料,然後再從檔案系統獲取資料,提高效率。

方法如下:

步驟1:需要一個單例的NSCache,由於我們的FileUtil本來就是單例的,所以只是需要在初始化FileUtil的時候例項出一個NSCache就行了。

_cache = [[NSCache alloc] init];

步驟2:寫檔案的時候,把NSData存入NSCache裡面

-(void)write:(NSData*)data forKey:(NSString*)key

{

NSString *filepath  = [self filePathForKey:key];

[_cache setObject:data forKey:key];

dispatch_async(fileQueue, ^{

[[NSFileManager defaultManager] createFileAtPath:filepath contents:data attributes:nil];

});

}

步驟3:讀檔案時候,先從NSCache裡面讀取,如果沒有再從檔案系統中讀取。從檔案系統中讀取到的資料,再放回到NSCache中。

-(NSData*)readForKey:(NSString*)key

{

if(key==nil){

return nil;

}

NSData *cacheData = [_cache objectForKey:key];

if(cacheData){

NSLog(@"get data from cache");

return cacheData;

}else{

NSLog(@"miss data from cache");

NSString *filepath =[self filePathForKey:key];

NSData *fileData =  [[NSFileManager defaultManager] contentsAtPath:filepath];

if(fileData){

[_cache setObject:fileData forKey:key];

}

return fileData;

}

}

總結:通過這樣的方式,形成了 記憶體 -> 檔案系統  -> 網路圖片 的三級圖片訪問系統。