一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - IOS - iOS中設置清除緩存功能的實現方法

iOS中設置清除緩存功能的實現方法

2021-03-24 18:22-此夜微涼 IOS

清除緩存基本上都是在設置界面的某一個Cell,于是我們可以把清除緩存封裝在某一個自定義Cell中,現在位大家介紹一種最基礎的清除緩存的方法,感興趣的朋友一起看看吧

絕大多數應用中都存在著清楚緩存的功能,形形色色,各有千秋,現為大家介紹一種最基礎的清除緩存的方法。清除緩存基本上都是在設置界面的某一個cell,于是我們可以把清除緩存封裝在某一個自定義cell中,如下圖所示:

iOS中設置清除緩存功能的實現方法

具體步驟

使用注意:過程中需要用到第三方庫,請提前安裝好:sdwebimage、svprogresshud。

1. 創建自定義cell,命名為gylclearcachecell

重寫initwithstyle:(uitableviewcellstyle)style reuseidentifier:(nsstring *)reuseidentifier方法,設置基本內容,如文字等等;主要代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
- (instancetype)initwithstyle:(uitableviewcellstyle)style reuseidentifier:(nsstring *)reuseidentifier
 {
  if (self = [super initwithstyle:style reuseidentifier:reuseidentifier]) {
    // 設置加載視圖
    uiactivityindicatorview *loadingview = [[uiactivityindicatorview alloc] initwithactivityindicatorstyle:uiactivityindicatorviewstylegray];
    [loadingview startanimating];
    self.accessoryview = loadingview;
    //設置文字
    self.textlabel.text = @"清楚緩存";
    self.detailtextlabel.text = @"正在計算";
 }
  return self;
}

2. 計算緩存文件大小

緩存文件包括兩部分,一部分是使用sdwebimage緩存的內容,其次可能存在自定義的文件夾中的內容(視頻,音頻等內容),于是計算要分兩部分,主要代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
unsigned long long size =
[nssearchpathfordirectoriesindomains(nscachesdirectory, nsuserdomainmask, yes).lastobject stringbyappendingpathcomponent:@"customfile"].filesize;
//filesize是封裝在category中的。
size += [sdimagecache sharedimagecache].getsize;  //customfile + sdwebimage 緩存
//設置文件大小格式
nsstring sizetext = nil;
if (size >= pow(10, 9)) {
 sizetext = [nsstring stringwithformat:@"%.2fgb", size / pow(10, 9)];
}else if (size >= pow(10, 6)) {
 sizetext = [nsstring stringwithformat:@"%.2fmb", size / pow(10, 6)];
}else if (size >= pow(10, 3)) {
 sizetext = [nsstring stringwithformat:@"%.2fkb", size / pow(10, 3)];
}else {
 sizetext = [nsstring stringwithformat:@"%zdb", size];
}

上述兩個方法都是在主線程中完成的,如果緩存文件大小非常大的話,計算時間會比較長,會導致應用卡死,考慮到該問題,因此需要將上述代碼放到子線程中完成。

3. 添加手勢監聽

對于監聽點擊cell可以使用代理也可以使用手勢監聽,為了將完整的功能封裝到自定義cell中,于是我們使用手勢監聽的方法來監聽點擊cell。

?
1
2
3
4
5
6
7
//計算完成后,回到主線程繼續處理,顯示文件大小,除去加載視圖,顯示箭頭,添加點擊事件
dispatch_async(dispatch_get_main_queue(), ^{
 self.detailtextlabel.text = [nsstring stringwithformat:@"%@",sizetext];
 self.accessoryview = nil;
 self.accessorytype = uitableviewcellaccessorydisclosureindicator;
 [self addgesturerecognizer:[[uitapgesturerecognizer alloc] initwithtarget:self action:@selector(clearcacheclick)]];    
 });

4. 清除緩存

清除緩存也是分為兩部分,一是清除sdwebimage的緩存,二是清除自定義文件緩存,主要代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
- (void)clearcacheclick
{
  [svprogresshud showwithstatus:@"正在清除緩存···"];
  [svprogresshud setdefaultmasktype:svprogresshudmasktypeblack];
  [[sdimagecache sharedimagecache] cleardiskoncompletion:^{
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
      nsfilemanager *mgr = [nsfilemanager defaultmanager];
      [mgr removeitematpath:gylcustomfile error:nil];
      [mgr createdirectoryatpath:gylcustomfile withintermediatedirectories:yes attributes:nil error:nil];
      dispatch_async(dispatch_get_main_queue(), ^{
        [svprogresshud dismiss];
        // 設置文字
        self.detailtextlabel.text = nil;       
      });    
    });
  }];
}

注意點:sdwebimage清除緩存是在子線程中進行的,清除自定義文件內容應該也放在子線程中(刪除大文件可能比較耗時),為了保證兩者不沖突,可以將刪除自定義文件內容放在sdwebimage緩存清除完畢之后進行,然后再回到主線程操作。

5. 其他注意點

a. 在計算文件大小過程中應該是不允許點擊cell的,如果有設置cell的didselectrowatindexpath方法,那么會導致手勢監聽不能使用。于是需要在計算時不能點擊cell。

b. 設置userinteractionenabled=no應放在設置文字之后,否則textlabel將顯示為灰色。

c. 當計算文件大小沒有結束的時,這個時候點擊返回,自定義cell不會被銷毀,他會執行完剩下的代碼,可以使用dealloc方法來驗證,在此情況下,可以使用弱引用的self來解決。

d. 當設置界面的cell比較多時,如果還在計算緩存大小時,清除緩存的cell從視圖中消失,那么加載視圖動畫就會被停止,當返回到清除緩存cell時,看不到加載動畫。解決方案兩種方法:一個是在cell創建的代理方法中重新開啟動畫;另一個是封裝到layoutsubviews方法中。

6. 使用

創建gylsettingviewcontroller繼承自uitableviewcontroller;首先為自定義cell注冊;其次在數據源方法中使用自定義cell;具體代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#import "gylsettingviewcontroller.h"
#import "gylclearcachecell.h"
@implementation gylsettingviewcontroller
static nsstring * const gylclearcachecellid = @"clearcache";
static nsstring * const gylsettingcellid = @"setting";
- (instancetype)init
{
  return [self initwithstyle:uitableviewstylegrouped];
}
- (void)viewdidload
{
  [super viewdidload];
  self.view.backgroundcolor = gylbgcolor;
  self.navigationitem.title = @"設置";
  [self.tableview registerclass:[gylclearcachecell class] forcellreuseidentifier:gylclearcachecellid];
  [self.tableview registerclass:[uitableviewcell class] forcellreuseidentifier:gylsettingcellid]; 
}
- (nsinteger)numberofsectionsintableview:(uitableview *)tableview
{
  return 3;
}
- (nsinteger)tableview:(uitableview *)tableview numberofrowsinsection:(nsinteger)section
{
  return 1;
}
- (uitableviewcell *)tableview:(uitableview *)tableview cellforrowatindexpath:(nsindexpath *)indexpath
{
  if (indexpath.section == 0 && indexpath.row == 0) {
    return [[gylclearcachecell alloc] initwithstyle:uitableviewcellstylevalue1 reuseidentifier:gylclearcachecellid];  
  }
  uitableviewcell *cell = [tableview dequeuereusablecellwithidentifier:gylsettingcellid];
  cell.textlabel.text = [nsstring stringwithformat:@"section-%zd,row--%zd",indexpath.section,indexpath.row];
  return cell;
}
@end

7. 效果

iOS中設置清除緩存功能的實現方法

計算文件大小

iOS中設置清除緩存功能的實現方法

正在清除緩存

iOS中設置清除緩存功能的實現方法

清除完畢

總結

以上所述是小編給大家介紹的ios中設置清除緩存功能的實現方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

原文鏈接:http://blog.csdn.net/wanglei0918/article/details/75557412

延伸 · 閱讀

精彩推薦
  • IOSiOS中MD5加密算法的介紹和使用

    iOS中MD5加密算法的介紹和使用

    MD5加密是最常用的加密方法之一,是從一段字符串中通過相應特征生成一段32位的數字字母混合碼。對輸入信息生成唯一的128位散列值(32個字符)。這篇文...

    LYSNote5432021-02-04
  • IOSiOS開發之視圖切換

    iOS開發之視圖切換

    在iOS開發中視圖的切換是很頻繁的,獨立的視圖應用在實際開發過程中并不常見,除非你的應用足夠簡單。在iOS開發中常用的視圖切換有三種,今天我們將...

    執著丶執念5282021-01-16
  • IOSiOS開發技巧之狀態欄字體顏色的設置方法

    iOS開發技巧之狀態欄字體顏色的設置方法

    有時候我們需要根據不同的背景修改狀態欄字體的顏色,下面這篇文章主要給大家介紹了關于iOS開發技巧之狀態欄字體顏色的設置方法,文中通過示例代碼...

    夢想家-mxj8922021-05-10
  • IOSiOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

    iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

    這篇文章主要介紹了iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果的相關資料,需要的朋友可以參考下...

    jiangamh8882021-01-11
  • IOS詳解iOS中多個網絡請求的同步問題總結

    詳解iOS中多個網絡請求的同步問題總結

    這篇文章主要介紹了詳解iOS中多個網絡請求的同步問題總結,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧...

    liang199111312021-03-15
  • IOSiOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和Masonry簡單使用)

    iOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和

    這篇文章主要介紹了iOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和Masonry簡單使用)的相關資料,需要的朋友可以參考下...

    CodingFire13652021-02-26
  • IOSiOS實現控制屏幕常亮不變暗的方法示例

    iOS實現控制屏幕常亮不變暗的方法示例

    最近在工作中遇到了要將iOS屏幕保持常亮的需求,所以下面這篇文章主要給大家介紹了關于利用iOS如何實現控制屏幕常亮不變暗的方法,文中給出了詳細的...

    隨風13332021-04-02
  • IOSiOS中UILabel實現長按復制功能實例代碼

    iOS中UILabel實現長按復制功能實例代碼

    在iOS開發過程中,有時候會用到UILabel展示的內容,那么就設計到點擊UILabel復制它上面展示的內容的功能,也就是Label長按復制功能,下面這篇文章主要給大...

    devilx12792021-04-02
主站蜘蛛池模板: 爽好大快深点一视频 | 免费一级毛片在级播放 | 日本孕妇与黑人xxxxxx | 91影视在线看免费观看 | 四虎永久在线精品国产馆v视影院 | 校花被老头夺去第一次动图 | 亚洲色图2 | 51国产午夜精品免费视频 | 国产综合第一页 | 日本javhd| 亚洲视频在线免费观看 | 日本一区二区三区四区无限 | 嗯啊好大视频 | 地址二地址三2021变更 | 奇米7777第四色 | youwu在线影院 | 久久免费看少妇高潮A片2012 | 香蕉免费高清完整 | 亚洲国产成人综合 | 大学生特黄特色大片免费播放 | 男人把大ji巴放进男人免费视频 | 亚洲va韩国va欧美va天堂 | 欧美综合一区二区三区 | 三上悠亚精品专区久久 | 美女的隐私无遮挡的网页 | 99热免费在线 | 国产精品一区二区在线观看完整版 | 国产一卡2卡3卡四卡国色天香 | 欧美无专区| 午夜精品久久久 | 好女孩韩剧免费观看 | chinses台湾男同志hd | 滑进了柔佳火热紧夹的 | 我将她侵犯1~6樱花动漫在线看 | 大乳一级一区二区三区 | 古代翁熄系小说辣文 | 毛片亚洲毛片亚洲毛片 | 给我免费观看的视频在线播放 | 被强上后我成瘾了小说 | 国产精品免费拍拍拍 | 天天综合色天天综合色sb |