一,沙盒数据存储在哪里?
当我们调用系统给我们提供的接口来存储数据时,有没有想过,我们存储的数据在手机里到底时怎么存储的呢。我们一步一步来探索一下。
1,先搞清楚数据缓存目录
上篇文章中提到,我们的数据被存储了/Library/PreferencePanes下,那到底是不是呢?我们来一探究竟。
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
//初始化NSNumber对象: 类方法、对象方法
//可将int、float、double、char等类型变量转NSNumber对象类型
int a = 12;
NSNumber *numA = [NSNumber numberWithInt:a];
NSNumber *numB = @5; //直接初始化NSNumber对象
//2.调用方法写入
NSArray *array = @[@"aa",numA,numB,@"bb"];
//字符串
[userDefaults setObject: array forKey:@"first"];
[userDefaults synchronize];//flash闪存
我们利用沙盒缓存了array,那么现在我们看看我们的沙盒目录
NSError *error = nil;
NSFileManager *file = [NSFileManager defaultManager];
NSArray *array = [file subpathsOfDirectoryAtPath: NSHomeDirectory() error:&error];
if(error){
NSLog(@"error=%@",error);
}else{
NSLog(@"array = %@",array);
}
控制台打印:SandBox[15403:1962220] array = (
".com.apple.mobile_container_manager.metadata.plist",
Library,
"Library/Preferences",
"Library/Preferences/LG.SandBox.plist",
"Library/Caches",
"Library/Caches/Snapshots",
"Library/Caches/Snapshots/LG.SandBox",
"Library/Caches/Snapshots/LG.SandBox/E2FE0326-87A9-4C08-9461-BC29E7038D07@2x.ktx",
"Library/Caches/Snapshots/LG.SandBox/52B0E8DA-AD21-44FE-8D84-28FA5B088C94@2x.ktx",
Documents,
tmp,
SystemData
)
看着这个LG.SandBox.plist文件怎么这么像NSUserDefaults的默认存储文件呢?好吧,我们来验证一下。
OK,现在我们来读取LG.SandBox.plist文件的内容。
//Library
NSArray*paths=NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,NSUserDomainMask,YES);
NSString*path=[pathsobjectAtIndex:0];
//然后拼接完整的路径
NSString *pathNew = [path stringByAppendingString:@"Preferences/LG.SandBox.plist"];
//2.通过字典方式获取plist文件数据
NSDictionary *dic = [NSDictionary dictionaryWithContentsOfFile: prePath];
NSLog(@"dic=%@",dic);
控制台信息:dic2={
first = (
aa,
12,
5,
bb
);
}
网友评论