<IOS>浅析本地存储



                                本地存储与管理 : 将数据储存到本地


. 文件管理 :

在ios 设备上包含有闪存,它的功能就跟硬盘是一样的。当设备断电或关机后闪存上的数据依然会被保存下来。值得注意的是应用程序不能访问整个闪存。只能访问由系统分配给应用的一块闪存,也叫做沙箱(sendbox)。沙箱中有一些标准目录如:Documents 。下面我们会使用NSFileManager的实例去操作 Documents目录的文件。

首先, 沙盒机制 ,ios的安全机制


@1. Bundle文件夹 里面有  ---> (1)代码 * (2)资源文件夹 * (3)配置文件

         特性 : (1) 内容在程序运行期间为只读,不能够进行任何的修改

               (2) 只有在开发期间进行修改

@2. Documents文件夹

         特性 : (1)大小限制(文件夹里的内容会自动上传到iCloud)

                (2)一般放数据库

                 (3)整个应用程序,从开始到删除一直存在的东西

@3. Library文件夹 里面有 ---> (1)Caches[缓存] * (2)Preference[配置]

             (1)Caches 特性: 1. 放图片缓存

                            2. 网络数据存储(缓存)

             (2)Preference 特性: NSUserDefaults存到preference

@4. tmp文件夹 临时性文件夹 ---> 数据只用一次,即用完就删

            例如 : 把压缩包解压, 解压完的东西放在tmp



 

1. 简单类型的存储:

 我们可以将字符串,字典, 数组存到本地.
 但更多的是将它们转化为data类型进行存储, 这样会便于读取与解析, 下面是字符串的转换:

  NSString *str =@"有只小蜜蜂呀, 飞在花丛中阿, 飞啊! !";

    

    NSData *data = [strdataUsingEncoding:NSUTF8StringEncoding];

   NSLog(@"%@", data);

    

    NSArray *array =NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,NSUserDomainMask, YES);

   NSString *path = [array firstObject];

    

    [data writeToFile:[NSStringstringWithFormat:@"%@/data.txt",path]atomically:YES];



2. 对复杂数据的存储:


 复杂类型对象的存储

// model类型的对象归档(序列化)NSData类型的对象,然后将NSData类型对象进行存储


-(void)ModelSave

{

    Model *model = [[[Modelalloc] init]autorelease];

    model.name = @"张潇";

    model.sex = @"";

    model.address =@"China";

    

    // model转换为data

   // 如果model在数组中,想要存储数组, 也必须用复杂类型对象将数组转化成data,然后进行存储

    NSData *data = [NSKeyedArchiverarchivedDataWithRootObject:model];

    

    NSArray *array =NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,NSUserDomainMask, YES);

    NSString *path = [arraylastObject];

    

    // 将data保存到(写入)目标文件, 实现储存

    [data writeToFile:[NSStringstringWithFormat:@"%@/DATA.txt", path]atomically:YES];



  无论是字符串,字典还是数组,转换的方式代码都是一样的.

  以上是内存上的存储.

 *********************************************************



3. 对硬盘上文件的管理:

    //管理硬盘上的文件

    NSFileManager *man = [NSFileManagerdefaultManager];// 单例

    

   // 判断一个文件是否存在

    NSArray *array =NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,NSUserDomainMask, YES);

   NSString *path = [array firstObject];

    

    BOOL judgr = [manfileExistsAtPath:[NSStringstringWithFormat:@"%@/hello", path]];

   if (judgr == YES) {

        NSString *str = [NSStringstringWithContentsOfFile:path encoding:NSUTF8StringEncodingerror:nil];

       NSLog(@"%@", str);

        

    }else{

        path = [NSStringstringWithFormat:@"%@/hello.txt", path];

       NSString *str = @"hello";

        [str writeToFile:pathatomically:YESencoding:NSUTF8StringEncodingerror:nil];

    }



二、NSUserDefaults 存储和读取

  NSUserDefaults (用户默认) 是被拿来作为用户参数的永久存储地方,当你的应用退出时,或设备关闭时,当前状态可以保存在NSUserDefaults中。值得一提的是 NSUserDefaults是通过获得单例对象来进行存储.

  保存:

      [[NSUserDefaultsstandardUserDefaultssetObject:name.text forKey:@"name"];

  读取:

    name.text = [[NSUserDefaultsstandardUserDefaults]objectForKey:@"name"];



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值