zoukankan      html  css  js  c++  java
  • iOS 关于本地持久化存储的探讨

    目前,用以本地化存储的方式有很多,常用的有以下:

    1.临时缓存

    先说说临时缓存,临时缓存一般相当于用来管理应用程序中全局需要常用的一些内容。比如当前用户的ID或者当前的定位信息等。

    常用的方式就是写一个静态变量,然后使用类方法调用。(或者单例类也行)

    static NSMutableDictionary *_cacheDic;
    #pragma mark - 临时缓存(退出应用后消失)
    +(id)cacheValueForKey:(SCCacheKey)key{
        return [[self cacheDic] valueForKey:[NSString stringWithFormat:@"%d",key]];
    }
    
    +(void)setCacheValue:(id)value forKey:(SCCacheKey)key{
        [[self cacheDic] setObject:value forKey:[NSString stringWithFormat:@"%d",key]];
    }
    
    +(void)deleteCacheForKey:(SCCacheKey)key{
        [[self cacheDic] removeObjectForKey:[NSString stringWithFormat:@"%d",key]];
    }

    2.本地存储NSUserdefaults,按KV存储,重启后还会存在。缺点1:只能存储NSString内容,缺点2:删除APP后会消失

    #pragma mark - 字段持久缓存(保存在数据库)
    +(NSString *)storeValueForKey:(SCStoreKey)key{
        return [[NSUserDefaults standardUserDefaults] valueForKey:[@(key) stringValue]];
    }
    
    +(void)setStoreValue:(NSString *)value forKey:(SCStoreKey)key{
        [[NSUserDefaults standardUserDefaults] setObject:value forKey:[@(key) stringValue]];
        [[NSUserDefaults standardUserDefaults] synchronize];
    }
    
    +(void)deleteStoreValueForKey:(SCStoreKey)key{
        [[NSUserDefaults standardUserDefaults] removeObjectForKey:[@(key) stringValue]];
        [[NSUserDefaults standardUserDefaults] synchronize];
    }

    3.NSKeyedArchiver(归档),可存储自定义对象。缺点:删除APP后会消失。

    #pragma mark - 对象持久缓存(保存在本地文件)
    +(void)setStoreObject:(NSObject<NSCoding> *)obj forKey:(SCObjectKey)key{
        NSString *path=[SCSysconfig filePathByName:[NSString stringWithFormat:@"%d.domain",key]];
        [NSKeyedArchiver archiveRootObject:obj toFile:path];
    }
    
    +(NSObject<NSCoding> *)storeObjectForKey:(SCObjectKey)key{
        NSString *path=[SCSysconfig filePathByName:[NSString stringWithFormat:@"%d.domain",key]];
        NSObject<NSCoding> *obj=[NSKeyedUnarchiver unarchiveObjectWithFile:path];
        return obj;
    }
    
    +(void)deleteStoreObjectForKey:(SCObjectKey)key{
        NSString *path=[SCSysconfig filePathByName:[NSString stringWithFormat:@"%d.domain",key]];
        [SCFileOper removeFile:path];
    }

    NSKeyedArchiver的使用方法可以参考这篇博客:http://www.cnblogs.com/xiaobaizhu/p/4011332.html

    4.KeyChain的使用,删除APP后,重新安装还存在。(只要BoundleID一致)

    Keychain即钥匙串,是用以在应用删除后还可以保存数据的一种方法。它的存储和应用的BoundleID有关。比如百度贴吧就实现了在应用删除后,再重新安装,如果Token还是有效的话,无需再登陆。

    Keychain的使用官方接口略烦,一般采用第三方库,具体可以参考我的博客:http://www.cnblogs.com/rayshen/p/4671477.html

    Demo:https://github.com/rayshen/LocalDataDemo

  • 相关阅读:
    程序员装逼指南(网上看到的,笑喷了……)
    【转】Flex4 中skinclass使用Path绘制多边形
    批处理根据星期自动备份到服务器的相应文件夹
    精妙Sql语句备忘
    The project file ' ' has been renamed or is no longer in the solution. 解决方案
    HttpPostedFileBase always null when upload file by asp.net mvc4 mobile
    解决.net绘制的 WinForm 在 windows7下变形的方法
    select语句中,直接为选出的数据添加uniqueidentifier字段
    向各位请教一个关于Decorator模式的问题
    子查询基础知识
  • 原文地址:https://www.cnblogs.com/rayshen/p/4910749.html
Copyright © 2011-2022 走看看