美文网首页
iOS 数据存储

iOS 数据存储

作者: 利尔德 | 来源:发表于2016-08-22 11:41 被阅读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)#>   
    }
    

    相关文章

      网友评论

          本文标题:iOS 数据存储

          本文链接:https://www.haomeiwen.com/subject/tfawsttx.html