数据存储

***********************沙盒操作**********************************
前往里面的 ~ 相当于 /Users/apple/
目录解析:
1.mainBundle
  NSString *bundlePath = [NSBundle mainBundle].bundlePath;


2.主目录
  NSString *homeDir = NSHomeDirectory();


3.Document,跟用户个人有关的文档,保存应用程序自身生成的数据文件。
  从网络上下载的文件不要保存在此文件夹中!
  iTunes、iCloud备份手机 --> 自动备份Document目录中的文件
  有3种取法:
  1>拼接主目录,不建议使用,要写 "/",可能会漏写
  NSString *docDir1 = [homeDir stringByAppendingString:@"/Documents"];


  2>拼接主目录,用专门的目录方法,拼接路径这个方法挺好,常用,不过老
  NSString *docDir2 = [homeDir stringByAppendingPathComponent:@"Documents"];


  3>专业方法!!!!!!!这是一个函数。PS:在OC开发中,一般如果遇到使用函数,这个函数通常是iOS和Mac通用的!
  苹果是闭源的系统,为了防止苹果调整文档目录的名称,建议使用这个方法!!!
  参数:
    1.NSDocumentDirectory 搜索路径的类型为Document
    2.NSUserDomainMask 在iOS上是固定的。用户的域集标识,Mac可以填别的。
    3.是否展开波浪号
  这个函数返回值为数组,在Mac上可能会返回多个值,但是在iOS中只会返回一个值,所以取数组最后一个元素就可以
  NSString *docDir3 = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];


  ps:避免这个错误!!!
      专业方法中,第1个参数不要写成NSDocumentationDirectory。Documentation这个文件夹默认是不存在的,这个目录的路径在Library下。如果没有创建这个目录就往其中写文件,iOS不会报任何错误!


4.Caches 缓存目录。
  通常保存从网络下载的文件,提供用户离线观看。
  程序员要提供清理缓存的功能:包括程序清理,检查过期数据,同时提供用户手动清理缓存的操作!!!
  参数:
    1.NSCachesDirectory 搜索路径的类型为Cache
    2.NSUsrDomainMask  用户域集标识
    3.是否展开波浪号
  NSString *cacheDir = [NSSearchPathDirectoryInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];


5.tmp目录
  通常保存从网络上下载的文件,不需要持久保存手机重新启动就会清空。
  NSString *tmpDir = NSTemporaryDirectory();


6.Preferences偏好设置目录
  保存手机常用设置信息,用户的个人信息,例如用户名,密码
  单例模式!default是关键字所以命名为defaults
  默认情况下,往偏好设置保存数据,更新的非常慢,如果需要即时保存,需要使用一个同步方法
  往偏好设置写数据,直接使用对应的setXXX方法,无需获得路径
  NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
  // 写入数据示例,会生成一个项目名的plist文件
  [defaults setObject:@"Rose" forKey:@"UserName"];
  [defaults setBool:YES forKey:@"AutoLogin"];
  // 同步方法
  [defaults synchronize];






******************************写文件************************
1.plist
  plist能写入的数据类型:
  NSString,NSNumber,Boolean,NSData,NSDate这五种可以直接写入plist。
  也可以组合成NSDictionary或者NSArray写入


2.归档
  如果要将自定义对象写入文件,需要使用到一个技术:“归档”
  归档的概念:
    归档就是保存到文件,文件中保存的都是二进制数据(字符串)
  使用归档的前提:
    自定义对象类要遵守 <NSCoding> 协议  
    encoder: 编码器,把自定义对象,转换成二进制数据
     - (void)encodeWithCoder:(NSCoder *)encoder
     {
        // 参数1:保存属性的成员变量
        // 参数2:保存的键值,通常和对象的属性名一致
        // 以下为两种类型键值的例子
        [encoder encodeObject:_name forKey:@"name"];
        [encoder encodeInt:_age forKey:@"age"];
     }


    decoder:解码器,把二进制数据,转换成自定义对象
     - (void)initWithCoder:(NSCoder *)decoder
     {
        self = [super init];
        if(self)
        {
            // 使用的键值名称要与编码的键名保持一致
            _name = [decoder decodeObjectFotKey:@"name"];
            _age = [decoder decodeIntForKey:@"age"];
        }
        return self;
     }


  键值归档,将自定义对象写入文件
  [NSKeyedArchiver archiverRootObject:自定义对象 toFile:文件的绝对路径];
  调用这个方法时,会自动调用encodeWithCoder方法对对象进行编码


  解档,读取文件中的自定义对象
  [NSKeyedUnArchiver unarchiverObjectWithFile:文件的绝对路径];
  调用这个方法时,会自动调用initWithCoder方法对对象进行解码
  




PS:
  平时养成看 函数调用堆栈 的习惯
  “运行时”机制 runtime 类似于一个操作系统个,是OC运行时提供的底层服务
  官方解释:运行时就是方法和方法调用之间的所有内容
  运行时是用C语言开发的,主要用于开发OC底层的代码,或者程序员开发一些动态的功能框架会使用到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值