EGOCache庫解決內(nèi)存上漲問題

字符串緩存

首先創(chuàng)建兩個簡單的button

UIButton *b1 = [UIButton buttonWithType:UIButtonTypeCustom];
b1.frame = CGRectMake(0, 50, 375, 200);
b1.backgroundColor = [UIColor cyanColor];
[b1 setTitle:@"保存" forState:UIControlStateNormal];
[b1 addTarget:self action:@selector(click1) forControlEvents:UIControlEventTouchUpInside];

點擊方法

- (void)click1
{
  NSString *saveString = @"快把我保存起來";
  [[EGOCache globalCache]setString:saveString forKey:@"string"];
  NSLog(@"保存");
}
- (void)click2
{
 NSString *cacheString = [[EGOCache globalCache]stringForKey:@"string"];
  NSLog(@"緩存字符串 : %@",cacheString);
}

我們會發(fā)現(xiàn)依次點擊兩個button后就會出現(xiàn)我們想要的字符串

36D744DE-77C5-4D69-84D0-CE698F7B12FB.png

那么重點來了,圖片緩存問題如何解決呢

[[EGOCache globalCache]setObject:saveArray forKey:@"array"];// 創(chuàng)建一個緩存的數(shù)組
NSArray *cacheArray = (NSArray *) [[EGOCache     globalCache]objectForKey:@"array"]; // 取出緩存的數(shù)組

因為從網(wǎng)絡(luò)上解析的圖片是以數(shù)組形式存儲,我們首先用到數(shù)組緩存方式(見最下面附錄),其次我們正常應(yīng)該先進行的是解析數(shù)據(jù)。
- (void)handleDiscovery
{

[TYAFNetworkTool getUrl:@"http://xxx.xxx.xxx" body:nil response:TYJSON requsetHeadFile:nil success:^(NSURLSessionDataTask *task, id resposeObject) {
    self.arr = [NSMutableArray array];  //數(shù)組初始化
    self.arr = resposeObject[@"trailers"];  //找到字典中的包含所有圖片的數(shù)組
    
    // arrImage數(shù)組是緩存后的數(shù)組,當(dāng)你解析完一次數(shù)據(jù)后,第二次不再解析數(shù)據(jù),直接用你緩存的數(shù)組中取圖片
    //(PS : 雖然說免除了解析數(shù)據(jù)這一步,但是數(shù)組里放的還是圖片的網(wǎng)址,并不是圖片,大家領(lǐng)略這個意思就好)

    self.arrImage = self.arr;
    [[EGOCache globalCache]setObject:self.arr forKey:@"array"];
    
    [_tv reloadData];
    
} failure:^(NSURLSessionDataTask *task, NSError *error) {
    
}];

}

然后我們要進行的是緩存后第二次不再解析數(shù)據(jù) 直接往tableView上賦值,下列代碼寫在viewDidLoad中

if ([[EGOCache globalCache]objectForKey:@"arr"] == nil) {
        [self handleDiscovery];
    }
    [self createTableView];

返回的數(shù)目就是arrImage(緩存數(shù)組)的個數(shù)

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:        (NSInteger)section
{
NSLog(@"%ld",[(NSArray *) [[EGOCache globalCache]objectForKey:@"array"] count]);
return [(NSArray *) [[EGOCache globalCache]objectForKey:@"array"] count];
}

cell中imageView賦圖片

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
cell *cell = [tableView dequeueReusableCellWithIdentifier:@"reuse"];
self.arrImage =  (NSArray *)[[EGOCache globalCache]objectForKey:@"array"];
[cell.imageView1 sd_setImageWithURL:[NSURL URLWithString:self.arrImage[indexPath.row][@"coverImg"]]];
return cell;
}

下面這些就是EGOCache第三方庫.h中的方法

// 創(chuàng)建自己的緩存目錄

  • (id)initWithCacheDirectory:(NSString*)cacheDirectory;
    // 創(chuàng)建一個全局的緩存單例(適合簡單的測試 而這篇博客也是主要用這個方法)
  • (instancetype)globalCache
    // 清除緩存
  • (void)clearCache;
    // 清除對應(yīng)key 的緩存
  • (void)removeCacheForKey:(NSString*)key;
    // 判讀是否有該key
  • (BOOL)hasCacheForKey:(NSString*)key;
    // 默認(rèn)緩存保留一天
    @property(nonatomic,assign) NSTimeInterval defaultTimeoutInterval; // Default is 1 day
    // 可自定義緩存保留日期
  • (void)setData:(NSData)data forKey:(NSString)key withTimeoutInterval:(NSTimeInterval)timeoutInterval;

// 緩存字符串

  -(void)cacheString
    {
    NSString *saveString= @"我的名字是Allen";
    [[EGOCache globalCache]setString:saveString forKey:@"string"];
    NSString *cacheString = [[EGOCache globalCache]stringForKey:@"string"];
    NSLog(@"string===%@",cacheString);
    }

//緩存數(shù)組

 -(void)cacheArray
{
NSArray *saveArray = @[@"1",@"2",@"3"];
[[EGOCache globalCache]setObject:saveArray forKey:@"array"];
NSArray *cacheArray = (NSArray *) [[EGOCache globalCache]objectForKey:@"array"];
NSLog(@"array==%@",cacheArray);
}

// 緩存data

-(void)cacheData
{
 NSString *saveString= @"我的名字是Allen";
 NSData *data = [saveString dataUsingEncoding: NSUTF8StringEncoding];
[[EGOCache globalCache]setData:data forKey:@"data"];
NSData *cacheData  = [[EGOCache globalCache]dataForKey:@"data"];
NSLog(@"data==%@",cacheData);
}

// 緩存圖片
- (void)setImage:(UIImage)anImage forKey:(NSString)key;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.自定義控件 a.繼承某個控件 b.重寫initWithFrame方法可以設(shè)置一些它的屬性 c.在layouts...
    圍繞的城閱讀 3,704評論 2 4
  • 接下來我們看base文件下的Foundation文件夾下文件 Base - Foundation 這個文件夾里面的...
    充滿活力的早晨閱讀 2,300評論 0 1
  • 技術(shù)無極限,從菜鳥開始,從源碼開始。 由于公司目前項目還是用OC寫的項目,沒有升級swift 所以暫時SDWebI...
    充滿活力的早晨閱讀 12,841評論 0 2
  • 1.badgeVaule氣泡提示 2.git終端命令方法> pwd查看全部 >cd>ls >之后桌面找到文件夾內(nèi)容...
    i得深刻方得S閱讀 4,980評論 1 9
  • 一、關(guān)于運營架構(gòu) 對好色派沙拉來說,「運營架構(gòu)」可能有下面幾個層面構(gòu)成。 1、健身房的合作體系——種子&核心消費者...
    luoxuzhenn閱讀 1,483評論 0 6

友情鏈接更多精彩內(nèi)容