iOS沙盒与清除缓存

SandBox,沙盒机制,是一种安全体系。我们所开发的每一个应用程序在设备上会有一个对应的沙盒文件夹,当前的程序只能在自己的沙盒文件夹中读取文件,不能访问其他应用程序的沙盒。在项目中添加的所有非代码的资源,比如图片、声音、属性列表等都存在自己的沙盒中。此外,在程序运行中动态生成的或者从网络获取的数据,如果要存储,也都是存储到沙盒中。

沙盒中的默认文件夹

(1)Documents:苹果建议将程序中建立的或在程序中浏览到的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录

(2)Library:存储程序的默认设置或其它状态信息;

里面又包含两个文件夹Caches和Preference;

Caches,存放缓存文件,iTunes不会备份此目录

(3)tmp:提供一个即时创建临时文件的地方

获取沙盒中的不同目录

代码

//  JRSandBoxPath.h
//  Fmdb
//
//  Created by jerei on 15-10-30.
//  Copyright (c) 2015年 jerei. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface JRSandBoxPath: NSObject
// 获取沙盒Document的文件目录
+ (NSString *)getDocumentDirectory;
// 获取沙盒Library的文件目录
+ (NSString *)getLibraryDirectory;
// 获取沙盒Library/Caches的文件目录
+ (NSString *)getCachesDirectory;
// 获取沙盒Preference的文件目录
+ (NSString *)getPreferencePanesDirectory;
// 获取沙盒tmp的文件目录
+ (NSString *)getTmpDirectory;
@end
//
//  JRSandBoxPath.m
//  Fmdb
//
//  Created by jerei on 15-10-30.
//  Copyright (c) 2015年 jerei. All rights reserved.
//
#import " JRSandBoxPath.h"
@implementation JRSandBoxPath
#pragma mark - 获取沙盒Document的文件目录
+ (NSString *)getDocumentDirectory{
  return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
}
#pragma mark - 获取沙盒Library的文件目录
+ (NSString *)getLibraryDirectory{
  return [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
}
#pragma mark - 获取沙盒Library/Caches的文件目录
+ (NSString *)getCachesDirectory{
  return [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
}
#pragma mark - 获取沙盒Preference的文件目录
+ (NSString *)getPreferencePanesDirectory{
  return [NSSearchPathForDirectoriesInDomains(NSPreferencePanesDirectory, NSUserDomainMask, YES) lastObject];
}
#pragma mark - 获取沙盒tmp的文件目录
+ (NSString *)getTmpDirectory{
  return
  NSTemporaryDirectory();
}
@end

清除缓存

在开发的过程中,遇到有用的数据,会进行缓存,当该数据不需要时,可以清除。在这里整理了几个方法,统计问价的大小,清除指定文件,清除指定目录下的全部文件等。

代码
//  JRCleanCaches.h
//  Fmdb
//
//  Created by jerei on 15-10-30.
//  Copyright (c) 2015年 jerei. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface JRCleanCaches : NSObject
// 根据路径返回目录或文件的大小
+ (double)sizeWithFilePath:(NSString *)path;
// 得到指定目录下的所有文件
+ (NSArray *)getAllFileNames:(NSString *)dirPath;
// 删除指定目录或文件
+ (BOOL)clearCachesWithFilePath:(NSString *)path;
// 清空指定目录下文件
+ (BOOL)clearCachesFromDirectoryPath:(NSString *)dirPath;
@end
//
//  JRCleanCaches.m
//  Fmdb
//
//  Created by jerei on 15-10-30.
//  Copyright (c) 2015年 jerei. All rights reserved.
//
#import "JRCleanCaches.h"
@implementation JRCleanCaches
#pragma mark - 根据路径返回目录或文件的大小
+ (double)sizeWithFilePath:(NSString *)path{
  // 1.获得文件夹管理者
  NSFileManager *manger = [NSFileManager defaultManager];
  // 2.检测路径的合理性
  BOOL dir = NO;
  BOOL exits = [manger fileExistsAtPath:path isDirectory:&dir];
  if (!exits) return 0;
  // 3.判断是否为文件夹
  if (dir) { // 文件夹, 遍历文件夹里面的所有文件
    // 这个方法能获得这个文件夹下面的所有子路径(直接\间接子路径)
    NSArray *subpaths = [manger subpathsAtPath:path];
    int totalSize = 0;
    for (NSString *subpath in subpaths) {
      NSString *fullsubpath = [path stringByAppendingPathComponent:subpath];
      BOOL dir = NO;
      [manger fileExistsAtPath:fullsubpath isDirectory:&dir];
      if (!dir) { // 子路径是个文件
        NSDictionary *attrs = [manger attributesOfItemAtPath:fullsubpath error:nil];
        totalSize += [attrs[NSFileSize] intValue];
      }
    }
    return totalSize / (1024 * 1024.0);
  } else { // 文件
    NSDictionary *attrs = [manger attributesOfItemAtPath:path error:nil];
    return [attrs[NSFileSize] intValue] / (1024.0 * 1024.0);
  }
}
#pragma mark - 得到指定目录下的所有文件
+ (NSArray *)getAllFileNames:(NSString *)dirPath{
  NSArray *files = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:dirPath error:nil];
  return files;
}
#pragma mark - 删除指定目录或文件
+ (BOOL)clearCachesWithFilePath:(NSString *)path{
  NSFileManager *mgr = [NSFileManager defaultManager];
  return [mgr removeItemAtPath:path error:nil];
}
#pragma mark - 清空指定目录下文件
+ (BOOL)clearCachesFromDirectoryPath:(NSString *)dirPath{
  //获得全部文件数组
  NSArray *fileAry =  [JRCleanCaches getAllFileNames:dirPath];
  //遍历数组
  BOOL flag = NO;
  for (NSString *fileName in fileAry) {
    NSString *filePath = [dirPath stringByAppendingPathComponent:fileName];
    flag = [JRCleanCaches clearCachesWithFilePath:filePath];
    if (!flag)
      break;
  }
  return flag;
}
@end
原文地址:http://www.cnblogs.com/jerehedu/p/4930593.html?utm_source=tuicool&utm_medium=referral点击打开链接
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值