• iOS开发 -李洪强-清除缓存


     

     

     

     

     

    //

    //  SetViewController.m

    //  dfhx

    //

    //  Created by dfhx_iMac_001 on 16/4/5.

    //  Copyright © 2016 luoyun. All rights reserved.

    //

     

    #import "SetViewController.h"

     

    @interface SetViewController ()<UITableViewDelegate,UITableViewDataSource>

     

    @property (nonatomic, strong) UITableView * tableView;

     

    @property (nonatomic, strong) NSArray * dataSource;

     

    @property (nonatomic, copy) NSString * cacheSize;

     

    @property (nonatomic, strong) UIView * navView;

     

    @end

     

    @implementation SetViewController

     

    - (void)viewDidLoad {

        [super viewDidLoad];

        // Do any additional setup after loading the view.

        [self tableView];

        [self navView];

    }

     

    - (UIView *)navView

    {

        if (!_navView) {

            _navView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, Screen_Width, 64)];

            _navView.backgroundColor = RGBA(51, 51, 51, 1);

            [self.view addSubview:_navView];

            

            UIButton * btn = [UIButton buttonWithType:UIButtonTypeCustom];

            [_navView addSubview:btn];

            

            [btn mas_makeConstraints:^(MASConstraintMaker *make) {

                

                make.left.mas_equalTo(_navView).offset(10);

                make.size.mas_equalTo(CGSizeMake(40, 40));

                make.topMargin.offset(20);

            }];

            

            [btn addTarget:self action:@selector(btnAction) forControlEvents:UIControlEventTouchUpInside];

            [btn setImage:[UIImage imageNamed:@"backItemImg.png"] forState:UIControlStateNormal];

            [btn setImageEdgeInsets:UIEdgeInsetsMake(15, 5, 8, 23)];

     

            

            

        }

        

        return _navView;

    }

     

    - (void)btnAction

    {

        AppDelegate * app = (AppDelegate *)[UIApplication sharedApplication].delegate;

        

        [app.window setRootViewController:app.leftSlide];

        

    }

     

     

    // 设置返回导航栏

    - (void)setNavigation

    {

        UIBarButtonItem *LeftButton = [[UIBarButtonItem  alloc] initWithTitle:nil style:UIBarButtonItemStylePlain target:self action:@selector(back)];

        [LeftButton setImage:[UIImage imageNamed:@"backItemImg.png"]];

        LeftButton.imageInsets = UIEdgeInsetsMake(20, 0, 15, 20);

        LeftButton.tintColor = [UIColor whiteColor];

        self.navigationItem.leftBarButtonItem = LeftButton;

    }

     

    - (void)back

    {

        [self.navigationController popViewControllerAnimated:YES];

    }

     

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

    {

        return 1;

    }

     

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    {

        static NSString * reuseID = @"cell";

        UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:reuseID];

        if (!cell) {

            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:reuseID];

        }

        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

        cell.textLabel.text =@"清除缓存";

            

        cell.detailTextLabel.text = self.cacheSize;

     

        cell.selectionStyle = UITableViewCellSeparatorStyleSingleLine;

        

         [self myClearCacheAction:NO];

        

        return cell;

    }

     

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

    {

            if ([self.cacheSize isEqualToString:@"0.00MB"]) {

                

                [self alertView:@"当前无缓存!" cancel:@""];

            }

            else

            {

                [self alertView:@"确认清除缓存?" cancel:@"取消"];

            }

    }

     

    - (void)alertView:(NSString *)alertTitle cancel:(NSString *)cancelTitle

    {

        

        UIAlertController *alertController = [UIAlertController alertControllerWithTitle:alertTitle message:@"" preferredStyle:UIAlertControllerStyleAlert];

        UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:cancelTitle style:UIAlertActionStyleCancel handler:nil];

        UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"好的" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

            

            if ([alertTitle isEqualToString:@"确认清除缓存?"]) {

                //清除缓存

                [self myClearCacheAction:YES];

            }

            

        }];

        if ([cancelTitle isEqualToString:@""]) {

            

            [alertController addAction:okAction];

        }

        else

        {

            [alertController addAction:cancelAction];

            [alertController addAction:okAction];

        }

        

        

        

        [self presentViewController:alertController animated:YES completion:nil];

        

    }

     

    //清理缓存

    -(void)myClearCacheAction:(BOOL)isClear

    {

        if (isClear == YES) {

            

            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

                NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];

                

                NSArray *files = [[NSFileManager defaultManager] subpathsAtPath:cachePath];

                

                for (NSString *p in files) {

                    NSError *error;

                    NSString *path = [cachePath stringByAppendingPathComponent:p];

                    if ([[NSFileManager defaultManager] fileExistsAtPath:path]) {

                        //清理缓存文件

                        [[NSFileManager defaultManager] removeItemAtPath:path error:&error];

                    }

                }

                [self performSelectorOnMainThread:@selector(clearCacheSuccess) withObject:nil waitUntilDone:YES];

            });

            

            

        }

        

        else

        {

            

            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{

                

                NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];

                

                CGFloat fileSize = [self folderSizeAtPath:cachePath];

                

                dispatch_async(dispatch_get_main_queue(), ^{

                    NSString * t = [NSString stringWithFormat:@"%.2fMB",fileSize];

                    self.cacheSize = t;

                    

                    NSIndexPath *indexPath=[NSIndexPath indexPathForRow:0 inSection:0];

                    [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationNone];

                    

                });

                

                

            });

        }

        

    }

     

     

    -(void)clearCacheSuccess

    {

        NSLog(@"缓存已清除!");

    }

     

    //计算目录下所有文件大小

    - (CGFloat)folderSizeAtPath:(NSString *)folderPath

    {

        NSFileManager *manager = [NSFileManager defaultManager];

        if (![manager fileExistsAtPath:folderPath]) {

            return 0;

        }

        

        NSEnumerator *childFilesEnumerator = [[manager subpathsAtPath:folderPath] objectEnumerator];

        

        NSString *fileName = nil;

        long long folderSize = 0;

        while ((fileName = [childFilesEnumerator nextObject]) != nil) {

            NSString *fileAbsolutePath = [folderPath stringByAppendingPathComponent:fileName];

            folderSize += [self fileSizeAtPath:fileAbsolutePath];

        }

        return folderSize/(1024.0*1024.0);

    }

     

    //计算文件大小

    - (long long)fileSizeAtPath:(NSString *)filePath

    {

        NSFileManager* manager = [NSFileManager defaultManager];

        if ([manager fileExistsAtPath:filePath]){

            return [[manager attributesOfItemAtPath:filePath error:nil] fileSize];

        }

        return 0;

        

    }

     

     

     

    // 懒加载tableview

    - (UITableView *)tableView

    {

        if (!_tableView) {

            _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 64, self.view.width, self.view.height) style:UITableViewStylePlain];

            _tableView.dataSource = self;

            _tableView.delegate  = self;

            _tableView.backgroundColor = [UIColor whiteColor];

            _tableView.showsHorizontalScrollIndicator = NO;

            _tableView.showsVerticalScrollIndicator = NO;

            _tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];

            _tableView.scrollEnabled = NO;

            [self.view addSubview:_tableView];

        }

        return _tableView;

    }

     

    #pragma mark ------当页面出现和消失的时候--------

    - (void)viewWillAppear:(BOOL)animated

    {

        

        [super viewWillAppear:animated];

        

        self.tabBarController.tabBar.hidden = YES;

    }

     

    - (void)viewWillDisappear:(BOOL)animated

    {

        [super viewWillDisappear:animated];

        self.navigationController.navigationBarHidden = NO;

        self.tabBarController.tabBar.hidden = NO;

        

    }

     

     

    - (void)didReceiveMemoryWarning {

        [super didReceiveMemoryWarning];

        // Dispose of any resources that can be recreated.

    }

     

    /*

    #pragma mark - Navigation

     

    // In a storyboard-based application, you will often want to do a little preparation before navigation

    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

        // Get the new view controller using [segue destinationViewController].

        // Pass the selected object to the new view controller.

    }

    */

     

    @end

  • 相关阅读:
    Android TextView里显示两种颜色
    Android 命令管理项目
    ANT build.xml文件详解
    Android Camera进行拍照
    Android 4.2以上的手机USB调试设置
    Android MediaPlayer和SurfaceView播放视频
    Android VideoView播放视频
    Android MediaRecorder录制音频
    Android Handler消息传递机制
    Android SurfaceView
  • 原文地址:https://www.cnblogs.com/LiLihongqiang/p/5617119.html
Copyright © 2020-2023  润新知