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 ; // 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 沙盒与清除缓存的更多相关文章
- iOS沙盒(sandbox)
iOS沙盒 每个ios应用都有自己的应用沙盒,应用沙盒就是文件系统目录,默认下iOS应用只能访问自己的沙盒 extenaion是iOS8新开放的一种对几个固定系统区域的扩展机制,它可以在一定程度上弥补 ...
- iOS沙盒目录结构解析
iOS沙盒目录结构解析 原文地址:http://blog.csdn.net/wzzvictory/article/details/18269713 出于安全考虑,iOS系统的沙盒机制规定每个应 ...
- IOS沙盒Files目录说明和常用操作
Ios沙盒目录清单 1 Documents 用于存储用户生成的文件.其他数据及其他程序不能重新创建的文件,默认文件通过iCloud自动备份.如果不需要iCloud备份,则设置标记 NSURLIsExc ...
- IOS沙盒机制
一,ios应用程序只能在为该程序创建的文件系统中读取文件,不可以去其他地方访问,此区域被称为沙盒 1,每个应用程序都有自己的存储空间 2,应用程序不能翻过自己的围墙去访问别的存储空间的内容. 3,应用 ...
- iOS - 沙盒与目录
NSFileManager NSBundle Class Cluster 采用Tagged Pointer的字符串 NSPathStore iOS证书ipa包重签名探究 url 结构 1. iOS 沙 ...
- IOS 学习之 iOS沙盒(sandbox) 介绍 沙盒机制 文件操作(一)
1.iOS沙盒机制 iOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等. ...
- iOS 阶段学习第25天笔记(iOS沙盒机制介绍)
iOS学习(OC语言)知识点整理 一.iOS沙盒机制介绍 1)概念: 每个ios应用都有自己的应用沙盒,应用沙盒就是文件系统目录,与其他应用放入文件 系统隔离,ios系统不允许访问 其他应用的应用沙盒 ...
- iOS沙盒机制介绍,Block 的介绍
一.iOS沙盒机制介绍 (转载) 1)概念:每个ios应用都有自己的应用沙盒,应用沙盒就是文件系统目录,与其他应用放入文件 系统隔离,ios系统不允许访问 其他应用的应用沙盒,但在ios8中已经开放访 ...
- ios沙盒路径
http://www.cnblogs.com/ios-wmm/p/3299695.html iOS沙盒路径的查看和使用 NSString *path = NSHomeDirectory();//主目录 ...
随机推荐
- CodeForces 794 G.Replace All
CodeForces 794 G.Replace All 解题思路 首先如果字符串 \(A, B\) 没有匹配,那么二元组 \((S, T)\) 合法的一个必要条件是存在正整数对 \((x,y)\), ...
- 使用gtest对DLL工程进行单元测试的实践
前言 关于单元测试的重要性.gtest的优缺点等就不说了.之前项目是没有做单元测试的,在VS的解决方案中,只有一个可执行的工程,其他的工程都是以DLL库的形式提供.本文只针对使用VS对DLL库进行单元 ...
- j.u.c系列(03)---之AQS:AQS简介
写在前面 Java的内置锁一直都是备受争议的,在JDK 1.6之前,synchronized这个重量级锁其性能一直都是较为低下,虽然在1.6后,进行大量的锁优化策略,但是与Lock相比synchron ...
- LPCScrypt, DFUSec : USB FLASH download, programming, and security tool, LPC-Link 2 Configuration tool, Firmware Programming
What does this tool do? The LPC18xx/43xx DFUSec utility is a Windows PC tool that provides support f ...
- SAE J1850 VPW Implement
---恢复内容开始--- OBDII Interface Project When I can ever find enough time away from schoolwork, I try to ...
- CentOS 6.8 搭建 Git 代码托管系统 Gitea
[荐] Gitea:Git with a cup of tea,在 Gogs 基础上,发展起来的 自助 Git 服务系统.Gogs是一个个人维护的版本,而Gitea是一个社区组织维护的,版本迭代更新快 ...
- Delphi如何在Form的标题栏绘制自定义文字
Delphi中Form窗体的标题被设计成绘制在系统菜单的旁边,如果你想要在标题栏绘制自定义文本又不想改变Caption属性,你需要处理特定的Windows消息:WM_NCPAINT.. WM_NCPA ...
- 无法打开物理文件 XXX.mdf",操作系统错误 5:"5(拒绝访问。)"的解决办法
http://blog.csdn.net/blackfield/article/details/6550499 用T-SQL命令附加数据库时,出现如下异常信息: 无法打开物理文件 XXX.mdf&qu ...
- 委托、Lambda表达式、事件系列06,使用Action实现观察者模式,体验委托和事件的区别
在"实现观察者模式(Observer Pattern)的2种方式"中,曾经通过接口的方式.委托与事件的方式实现过观察者模式.本篇体验使用Action实现此模式,并从中体验委托与事件 ...
- Android 开机画面和wallpaper总结
Android 开机画面和wallpaper总结 1 kernel的开机画面修改 1.图片需求:图片格式:png图片大小:1024x600(具体示lcd分辨率而定). 2.转换图片png图片. 假设 ...