zoukankan      html  css  js  c++  java
  • 第十七篇、归档缓存模型

    简介:

      在很多的情况下,我们常常需要去缓存模型数据,比如一下简单的数据(个人信息等)。

    注意:

      1.必须需要NSCoding协议

    存盘示例:

    .h

    #import <Foundation/Foundation.h>
    
    @interface LocalData : NSObject
    
    + (instancetype)read:(NSString *)name;
    + (void)save:(NSString *)name className:(id)className;
    
    @end

    .m

    #import "LocalData.h"
    
    @implementation LocalData
    
    + (instancetype)read:(NSString *)name {
    //    NSData *_data = [[NSData alloc] initWithContentsOfFile:[self getFilePathWithModelKey:name]];
    //    //解档辅助类
    //    NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:_data];
    //    //解档出数据模型Student
    //    //解码并解档出model
    //    id model = [unarchiver decodeObjectForKey:name];
    //    //关闭解档
    //    [unarchiver finishDecoding];
    //    return model;
        
        //获得保存数据
        NSData *getthemeAndAboutData = [[NSUserDefaults standardUserDefaults] objectForKey:name];
        //转成模型获取数据
        id model =   [NSKeyedUnarchiver unarchiveObjectWithData:getthemeAndAboutData];
        
        return model;
    
        
        //return [NSKeyedUnarchiver unarchiveObjectWithFile:[self getFilePathWithModelKey:name]];
    }
    
    + (void)save:(NSString *)name className:(id)className
    {
    
    //    BOOL success = [NSKeyedArchiver archiveRootObject:className toFile:[self getFilePathWithModelKey:name]];
    //    NSLog(@"保存的状态%d",success);
        
        ///////////////////////归档
    //    //需要用NSMutableData来中中介
    //    NSMutableData *data = [[NSMutableData alloc] init];
    //    //创建归档辅助类
    //    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
    //    //编码
    //    [archiver encodeObject:className forKey:name];
    //    //结束编码
    //    [archiver finishEncoding];
    //    //写入
    //    [data writeToFile:[self getFilePathWithModelKey:name] atomically:YES];
        
        
        NSData *themeAndAboutData = [NSKeyedArchiver archivedDataWithRootObject:className];
        [[NSUserDefaults standardUserDefaults] setObject:themeAndAboutData forKey:name];
        [[NSUserDefaults standardUserDefaults] synchronize];
        
    }
    
    //得到目录
    +(NSString *) getFilePathWithModelKey:(NSString *)modelkey
    {
        NSArray *array =  NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
        return [[array objectAtIndex:0] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.archiver",modelkey]];
        
    }
    
    @end
  • 相关阅读:
    基于node.js+socket.io+html5实现的斗地主游戏(1)概述
    [javascript]switchTab:仿腾讯首页Tab栏切换js插件
    [js]利用闭包向post回调函数传参数
    [CSS]利用伪元素实现一些特殊图形 from baidu校招
    [javascript]模块化&命名污染—from 编程精解
    [随手记]2014前端面试题解
    [IE bug] ajax请求 304解决方案
    [java]基于UDP的Socket通信Demo
    [JQuery]ScrollMe滚动特效插件
    java.lang.OutOfMemoryError及解决方案
  • 原文地址:https://www.cnblogs.com/HJQ2016/p/5818165.html
Copyright © 2011-2022 走看看