首页 技术 正文
技术 2022年11月20日
0 收藏 844 点赞 4,548 浏览 3915 个字

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 ; // 3.判断是否为文件夹
if (dir) { // 文件夹, 遍历文件夹里面的所有文件
// 这个方法能获得这个文件夹下面的所有子路径(直接\间接子路径)
NSArray *subpaths = [manger subpathsAtPath:path];
int totalSize = ;
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.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/ 
版权声明:本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

技术咨询:IOS 沙盒与清除缓存 

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,991
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,505
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,349
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,134
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,766
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,844