沙盒
- iOS的沙盒机制:
1、iOS的应用程序只能对自己创建的文件系统读取文件,这个独立、封闭、安全的空间,叫做沙盒。它一般存放着程序包文件(可执行文件)、图片、音频、视频、plist文件、sqlite数据库以及其他文件;
2、每个应用程序都有自己的独立的存储空间(沙盒);
3、一般来说,应用程序之间是不可以互相访问沙盒的;
4、模拟器的沙盒位置路径:/User/userName/Library/Application Support/iPhone Simulator - 沙盒的构成:当创建应用程序的时候,在每个沙盒中都含有三个文件,分别是Document、Library和temp。
1、Document:一般需要持久的数据都放在此目录中,可以在当中添加子文件夹,iTunes备份和恢复的时候,会包括此目录;
2、Library:设置程序的默认设置和其他的状态;
3、temp:创建临时文件的目录,当iOS设备重启时,文件会被自动清除。 - 获取沙盒的目录:
.h文件
#import <Foundation/Foundation.h>
@interface YDWSandBoxPath : NSObject
// 获取沙盒Document文件目录
+ (NSString *)getDocumentDirectory;
// 获取沙河Library文件目录
+ (NSString *)getLibraryDirectory;
// 获取沙盒Library/Caches文件目录
+ (NSString *)getCacheDirectory;
// 获取沙盒Preference文件目录
+ (NSString *)getPreferencePanesDirectory;
//获取沙盒tmp文件目录
+ (NSString *)getTmpDirectory;
@end
.m文件
#import "YDWSandBoxPath.h"
@implementation YDWSandBoxPath
+ (NSString *)getDocumentDirectory {
return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
}
+ (NSString *)getLibraryDirectory {
return [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
}
+ (NSString *)getCacheDirectory {
return [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
}
+ (NSString *)getPreferencePanesDirectory {
return [NSSearchPathForDirectoriesInDomains(NSPreferencePanesDirectory, NSUserDomainMask, YES) lastObject];
}
+ (NSString *)getTmpDirectory {
return NSTemporaryDirectory();
}
@end
- 清除缓存:在开发的过程中,遇到有用的数据,会进行缓存,当该数据不需要时,可以清除。在这里整理了几个方法,统计文件的大小,清除指定文件,清除指定目录下的全部文件等。
// 根据路径返回目录或文件的大小
+ (double)sizeWithFilePath:(NSString *)path {
// 获取文件的管理者
NSFileManager *manager = [NSFileManager defaultManager];
// 检测路径的合理性
BOOL direct = NO;
BOOL exits = [manager fileExistsAtPath:path isDirectory:&direct];
if (!exits) {
return 0;
}
if (direct) {
NSArray *subPaths = [manager subpathsAtPath:path];
int totalSize = 0;
for (NSString *subPath in subPaths) {
NSString *fullSubPath = [path stringByAppendingPathComponent:subPath];
BOOL dir = NO;
[manager fileExistsAtPath:path isDirectory:&dir];
if (!dir) {
NSDictionary *attrs = [manager attributesOfItemAtPath:fullSubPath error:nil];
totalSize += [attrs[NSFileSize] integerValue];
}
}
return totalSize/(1024*1024.0);
} else {
NSDictionary *attrs = [manager attributesOfItemAtPath:path error:nil];
return [attrs[NSFileSize] intValue]/(1024*1024.0);
}
}
// 得到指定目录下的所有文件
+ (NSArray *)getAllFileNames:(NSString *)dirPath {
return [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:dirPath error:nil];
}
// 删除指定目录或文件
+ (BOOL)clearCacheWithFilePath:(NSString *)path {
return [[NSFileManager defaultManager] removeItemAtPath:path error:nil];
}
// 清空指定目录下文件
+ (BOOL)clearCacheFormDirectoryPath:(NSString *)dirPath {
NSArray *fileArray = [YDWSandBoxPath getAllFileNames:dirPath];
BOOL flag = NO;
for (NSString *fileName in fileArray) {
NSString *filePath = [dirPath stringByAppendingPathComponent:fileName];
flag = [YDWSandBoxPath clearCacheWithFilePath:filePath];
if (!flag) {
break;
}
}
return flag;
}
NSData
- NSData存储的是二进制数据,屏蔽了数据之间的差异,文本、音频、图像等数据都可用NSData来存储;
- NSData的用法:
1、NSString与NSData互相转换
NSData --> NSString为:NSString *dataString = [[NSString alloc] initWithData:[NSData data] encoding:NSUTF8StringEncoding];
NSString --> NSData为:NSData *stringData = [[NSString string] dataUsingEncoding:NSUTF8StringEncoding];
将data类型的数据,转成UTF8的数据:
+ (NSString*)dataToUTF8String:(NSData *)data {
return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}
将string转换为指定编码 :
+ (NSString *)changeDataToEncodinString:(NSData *)data encodin:(NSStringEncoding )encoding {
return [[NSString alloc] initWithData:data encoding:encoding];
}
2、NSData 与 UIImage
NSDat --> UIImage为:UIImage *image = [UIImage imageWithData: imageData];
例如:
- (NSData *)changePictureToNSData {
NSString *filePath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:[NSString stringWithFormat:@"ceshi.png"]];
NSData *imageData = [NSData dataWithContentsOfFile:filePath];
return imageData;
}
Plist文件:
数组、字典只能将BOOL、NSNumber、NSString、NSData、NSDate、NSArray、NSDictionary写入属性列表plist文件.
- String方式添加
NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"xxx.plist"];
[[NSString string] writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil];
- Array方式添加
NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"xxx.plist"];
[[NSArray array] writeToFile:path atomically:YES];
- Dictionary方式添加
NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"xxx.plist"];
[[NSDictionary dictionary] writeToFile:path atomically:YES];