沙盒缓存
2016-01-02 01:40
225 查看
IOS 沙盒与清除缓存,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.
//
return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
}
return [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
}
return [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
}
return [NSSearchPathForDirectoriesInDomains(NSPreferencePanesDirectory, NSUserDomainMask, YES) lastObject];
}
return
NSTemporaryDirectory();
}
@end
清除缓存
在开发的过程中,遇到有用的数据,会进行缓存,当该数据不需要时,可以清除。在这里整理了几个方法,统计问价的大小,清除指定文件,清除指定目录下的全部文件等。
代码
// JRCleanCaches.h
// Fmdb
//
// Created by jerei on 15-10-30.
// Copyright (c) 2015年 jerei. All rights reserved.
//
// 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];
} else { // 文件
NSDictionary *attrs = [manger attributesOfItemAtPath:path error:nil];
return [attrs[NSFileSize] intValue] / (1024.0 * 1024.0);
}
}
NSArray *files = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:dirPath error:nil];
return files;
}
NSFileManager *mgr = [NSFileManager defaultManager];
return [mgr removeItemAtPath:path error:nil];
}
//获得全部文件数组
NSArray *fileAry = [JRCleanCaches getAllFileNames:dirPath];
//遍历数组
BOOL flag = NO;
for (NSString *fileName in fileAry) {
NSString *filePath = [dirPath stringByAppendingPathComponent:fileName];
flag = [JRCleanCaches clearCachesWithFilePath:filePath];
}
return flag;
}
@end
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
import ” JRSandBoxPath.h”
@implementation JRSandBoxPathpragma 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
import “JRCleanCaches.h”
@implementation JRCleanCachespragma 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
相关文章推荐
- c#实现文件上传 下载 从URL上下载
- 操作系统核心原理-5.内存管理(中):分页内存管理
- 程序员新年愿景
- 乱记-6 2016年元旦已过
- Appserv配置多站点访问(转)
- 注册入口和引导加载
- Win10管理员账户被禁用无法进入系统的解决方法
- JUnit4 中@AfterClass @BeforeClass @after @before的区别对比
- 求两个数之间的随机数,其它语言也是同理
- ARM Linux Oops使用小结
- include指令
- 大数据系列第一课:scala基础
- 使用github + Octopress 搭建免费博客 + 碰到问题的解决方法
- 2016,开始我的前端博客之旅吧!
- 第六届福建省大学生程序设计竞赛 Common Tangents
- delete释放new[]造成的泄漏
- 黑马程序员——Java---&&和||逻辑表达式
- 反射调用方法
- my-innodb-heavy-4G.cnf中文注释(主要配置文件注释)
- info.list