zoukankan      html  css  js  c++  java
  • 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"]];

  • 相关阅读:
    <转>Npoi导入导出Excel操作<载>
    将DataTable导出为Excel C#
    错误 X “X1”不包含“XX2”的定义,并且找不到可接受类型为“X1”的第一个参数的扩展方法“XX2”(是否缺少 using 指令或程序集引用?)
    错误 1 未知的服务器标记“asp:ScriptManager”。
    分析器错误消息: 类型“test.test.testx”不明确: 它可能来自程序集“F: estProjectin est.test.DLL”或程序集“F: estProjectin estProject.DLL”。请在类型名称中显式指定程序集。
    There are no interfaces on which a capture can be done.
    基础知识系列☞GET和POST→及相关知识
    基础知识系列☞Abstract和Virtual→及相关知识
    同源策略
    26Mybatis_一级缓存及其测试
  • 原文地址:https://www.cnblogs.com/linxiu-0925/p/5465188.html
Copyright © 2011-2022 走看看