iOS 数据存储

2016-08-22  本文已影响8人  利尔德

沙盒机制就是指ios应用程序只能在为该程序创建的文件系统中读取文件,不可以去其它地方访问,所有的非代码文件都要保存在此,图像,图标,声音,映像,属性列表,文本文件等。(ios8之前是如此,iOS8新开放了一种对几个固定系统区域的扩展机制extension,可以在一定程度上弥补iOS的沙盒机制对应用间通信的限制).每个应用程序都有自己的存储空间 ;不能翻过自己的围墙去访问别的存储空间;应用程序请求的数据都要通过权限检测,假如不符合条件的话,不会被放行

  1. 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;
}
  1. 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)#>   
}
上一篇下一篇

猜你喜欢

热点阅读