• iOS-app清除缓存


    一直寻寻觅觅找app的清除缓存的方法,发现:并没有什么固定的方法,你既然有做对应的缓存机制,这个机制就应该有清除缓存的方法。例如如果你使用某个第三方的图片库,这个库有缓存机制,那么它就应该提供对应的清除缓存的方法。你调用对应的方法进行清除,如果你自己有用到数据库,那么你就应该清除数据库里面的数据等等。有的公司需求是显示缓存大小,有的不需要:

    @property ( nonatomic , strong ) UILabel * cachLabel;//显示缓存有多少m

    cell.cachLabel . text = [ NSString stringWithFormat : @"(%.2fM)" , [ self filePath ]];

    // 显示缓存大小

    - ( float )filePath

    {
        
        NSString * cachPath = [ NSSearchPathForDirectoriesInDomains ( NSCachesDirectory , NSUserDomainMask , YES ) firstObject ];
        
        return [ self folderSizeAtPath :cachPath];
        
    }

    不需要显示缓存大小M的:

        //iOS8以上的版本使用
                UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"提示" message:@"是否清除缓存?"preferredStyle:UIAlertControllerStyleAlert];
                
                UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
                    //清除缓存所需要做的处理
                    [self clearFile];
                }];
                UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
                    
                }];
                [alertController addAction:okAction];
                [alertController addAction:cancelAction];
                
            [self presentViewController:alertController animated:YES completion:nil];

    #pragma mark ---action---

    //1:首先我们计算一下 单个文件的大小

    - ( long long ) fileSizeAtPath:( NSString *) filePath{
        
        NSFileManager * manager = [ NSFileManager defaultManager ];
        
        if ([manager fileExistsAtPath :filePath]){
            
            return [[manager attributesOfItemAtPath :filePath error : nil ] fileSize ];
            
        }
        
        return 0 ;
        
    }

    //2: 遍历文件夹获得文件夹大小,返回多少 M(提示:你可以在工程界设置()m)

    - ( float ) folderSizeAtPath:( NSString *) folderPath{
        
        NSFileManager * manager = [ NSFileManager defaultManager ];
        
        if (![manager fileExistsAtPath :folderPath]) return 0 ;
        
        NSEnumerator *childFilesEnumerator = [[manager subpathsAtPath :folderPath] objectEnumerator ];
        
        NSString * fileName;
        
        long long folderSize = 0 ;
        
        while ((fileName = [childFilesEnumerator nextObject ]) != nil ){
            
            NSString * fileAbsolutePath = [folderPath stringByAppendingPathComponent :fileName];
            
            folderSize += [ self fileSizeAtPath :fileAbsolutePath];
            
        }
        
        return folderSize/( 1024.0 * 1024.0 );
        
    }

    // 清理缓存

    - ( void )clearFile

    {
        
        NSString * cachPath = [ NSSearchPathForDirectoriesInDomains ( NSCachesDirectory , NSUserDomainMask , YES ) firstObject ];
        
        NSArray * files = [[ NSFileManager defaultManager ] subpathsAtPath :cachPath];
        
        NSLog ( @"cachpath = %@" , cachPath);
        
        for ( NSString * p in files) {
            
            NSError * error = nil ;
            
            NSString * path = [cachPath stringByAppendingPathComponent :p];
            
            if ([[ NSFileManager defaultManager ] fileExistsAtPath :path]) {
                
                [[ NSFileManager defaultManager ] removeItemAtPath :path error :&error];
                
            }
            
        }
        
        [ self performSelectorOnMainThread : @selector (clearCachSuccess) withObject :nil waitUntilDone : YES ];
        
    }

    - ( void )clearCachSuccess
    {
        
        NSLog ( @" 清理成功 " );

        //iOS8以上的版本使用
        UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"提示" message:@"缓存清理完毕"preferredStyle:UIAlertControllerStyleAlert];
        
        UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
          
           
        }];
       
        [alertController addAction:okAction];
        [self presentViewController:alertController animated:YES completion:nil];
        
       [self.tableView reloadInputViews];//清理完之后重新导入数据
        
    }

    给app评论功能实现

      //评价
                [[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?id=1017244804&pageNumber=0&sortOrdering=2&type=Purple+Software&mt=8"]];

  • 相关阅读:
    6、short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?-Java面试题答案
    5、switch语句能否作用在byte上,能否作用在long上,能否作用在String上?-Java面试题答案
    4、在JAVA中如何跳出当前的多重嵌套循环?-Java面试题答案
    3、说说&和&&的区别-Java面试题答案
    2、Java有没有goto?-Java,面试题答案
    1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?-Java面试题答案
    javaScript属性
    javaScript基本知识
    javaScript额外笔记
    OOP-基础知识(c#)
  • 原文地址:https://www.cnblogs.com/linxiu-0925/p/5465188.html
Copyright © 2020-2023  润新知