iOS 数据存储

沙盒机制就是指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)#>   
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • [TOC] 一、应用的文件结构 I. 应用沙盒 每个iOS应用都有一个 应用沙盒「文件系统目录」,与其他文件系统隔...
    _凉风_阅读 1,704评论 2 8
  • iOS应用数据存储的常用方式 XML属性列表(plist)归档2.Preference(偏好设置)3.NSKeye...
    清风沐沐阅读 427评论 0 1
  • 前言 在iOS开发中必不可少的要用到数据存储,数据的处理是iOS开发中的核心技术,适当的对数据进行持久化存储可以实...
    若小北00阅读 8,272评论 6 28
  • 前言 在iOS开发中数据存储的方式可以归纳为磁盘缓存和内存缓存:磁盘缓存分为两类:文件、数据库存储。 文件存储:N...
    js丶阅读 4,841评论 2 23
  • 已然大四,大一大二曾经看过几本鸡汤书籍,看过几本时间管理书籍,想要改变自己。然而只是坚持两三天,之后不了了之,最后...
    王策策阅读 187评论 0 0

友情链接更多精彩内容