沙盒机制就是指ios应用程序只能在为该程序创建的文件系统中读取文件,不可以去其它地方访问,所有的非代码文件都要保存在此,图像,图标,声音,映像,属性列表,文本文件等。(ios8之前是如此,iOS8新开放了一种对几个固定系统区域的扩展机制extension,可以在一定程度上弥补iOS的沙盒机制对应用间通信的限制).每个应用程序都有自己的存储空间 ;不能翻过自己的围墙去访问别的存储空间;应用程序请求的数据都要通过权限检测,假如不符合条件的话,不会被放行
- plist储存
储存位置 Documents -> data.plist
存数据:
- (IBAction)save:(id)sender {
/**
*
获取沙盒的根路径
NSString *home = NSHomeDirectory();
拼接Documents路径
NSString *docPath = [home stringByAppendingString:@"/Documents"];
NSString *docPath = [home stringByAppendingPathComponent:@"Documents"];
NSDocumentDirectory : 查找Documents文件夹
NSUserDomainMask : 在用户的应用程序下查找
YES 把路径展开 NO 当前应用的根路径 == ~
NO ~/Documents
*/
NSString *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSLog(@"%@",docPath);
// 拼接文件路径
NSString *filePath = [docPath stringByAppendingPathComponent:@"data.plist"];
// 只有具备writeToFile:的对象才能使用plist存储,NSArray
NSArray *array = @[@1,@2,@"123"];
[array writeToFile:filePath atomically:YES];
}
读数据:
- (IBAction)read:(id)sender {
NSString *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSLog(@"%@",docPath);
// 拼接文件路径
NSString *filePath = [docPath stringByAppendingPathComponent:@"data.plist"];
NSArray *data = [NSArray arrayWithContentsOfFile:filePath];
NSLog(@"%@",data);
}
2.NSKeyedArchiver
存储位置 Library ->Caches ->data
(1)归档,解档一个对象
- (IBAction)save:(id)sender {
HMPerson *person = [HMPerson new];
person.age = 18;
NSString *docPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
// 拼接文件路径
NSString *filePath = [docPath stringByAppendingPathComponent:@"person.data"];
[NSKeyedArchiver archiveRootObject:person toFile:filePath];
}
- (IBAction)read:(id)sender {
NSString *docPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
// 拼接文件路径
NSString *filePath = [docPath stringByAppendingPathComponent:@"person.data"];
HMPerson *p = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
NSLog(@"%d",p.age);
}
#import <Foundation/Foundation.h>
@interface HMPerson : NSObject<NSCoding>
@property (nonatomic, assign) int age;
@end
#import "HMPerson.h"
@implementation HMPerson
// 在对象归档的时候调用
// 哪些属性需要归档
// 这些属性怎么归档
- (void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeInt:_age forKey:@"age"];
}
// 在对象解档的时候调用
// 哪些属性需要解档
// 这些属性怎么解档
- (id)initWithCoder:(NSCoder *)aDecoder
{
// 当父类实现了NSCoding,就能调用 [super initWithCoder]
if (self = [super init]) {
_age = [aDecoder decodeIntForKey:@"age"];
}
return self;
}
- NSUserDefault
储存位置 Library ->Preferences
- (IBAction)save:(id)sender {
// [NSUserDefaults standardUserDefaults]可以直接操作偏好设置文件夹
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
// 自动帮我们生成一个plist文件存放在偏好设置的文件夹
[defaults setObject:@"hm" forKey:@"account"];
// 同步:把内存中的数据和沙盒同步
[defaults synchronize];
}
- (IBAction)read:(id)sender {
// [NSUserDefaults standardUserDefaults]可以直接操作偏好设置文件夹
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSLog(@"%@",[defaults objectForKey:@"account"]);
// NSDictionary *dict = @{@"account":@"hm"};
//
// dict writeToFile:<#(NSString *)#> atomically:<#(BOOL)#>
}