ios缓存系列---1.0_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > ios缓存系列---1.0

ios缓存系列---1.0

 2016/5/26 5:30:14  金色的鱼  程序员俱乐部  我要评论(0)
  • 摘要:1.程序中什么时候用到缓存2.缓存机制1)第一次请求数据时,内存缓存中没有数据,硬盘缓存中没有数据。2)当服务器返回数据时,需要做一下步骤1>使用服务器的数据2>将服务器的数据缓存到硬盘(沙盒)此时,内存缓存中有数据,硬盘缓存中没有数据3)再次请求数据分为两种情况:1>如果程序并没有关闭,一直在运行,那么此时内存缓存中有数据,硬盘缓存中有数据。如果此时再次请求数据,直接使用内存缓存中的数据即可。2>如果程序重新启动那么此时内存缓存的数据已经消失,硬盘缓存依旧存在
  • 标签:iOS 缓存


     1. 程序中什么时候用到缓存

 

  2. 缓存机制

    1)第一次请求数据时,内存缓存中没有数据,硬盘缓存中没有数据。

      

    2)当服务器返回数据时,需要做一下步骤

              1>使用服务器的数据

              2>将服务器的数据缓存到硬盘(沙盒)

    此时,内存缓存中有数据,硬盘缓存中没有数据

     

    3)再次请求数据分为两种情况:

              1>如果程序并没有关闭,一直在运行,

              那么此时内存缓存中有数据,硬盘缓存中有数据。如果此时再次请求数据,直接使用内存缓存中的数据即可。

              2>如果程序重新启动

              那么此时内存缓存的数据已经消失,硬盘缓存依旧存在,如果此时再请求数据,直接使用硬盘缓存的数据即可。

    提示:从硬盘缓存中读取数据后,内存缓存中又有数据了。

  3.缓存的几种常用方法及具体如何使用

    1) 归档  

    2) 生成plist 

    3) NSUserDefault

    4) sqlite

 

1.1>归档:可以存放自定义对象  <NSCoding>

常用方法:  //存    [NSKeyedArchiver archiveRootObject:p toFile:path];

       //取  [NSKeyedUnarchiver unarchiverObjectWithFile:path];

       /*当将一个自定义对象保存到文件的时候就会调用该方法,在该方法中说明如何存储自定义对象的属性*/

      -(void)encodeWithCoder:(NSCoder *)aCoder

      /*当文件中读取一个对象的时候回调用该方法,在该方法中说明如何读取保存在文件中的对象*/

      -(id)initWithCoder:(NSCoder *)aDecoder

1 #import <Foundation/Foundation.h>
2 
3 @interface Person : NSObject<NSCoding>
4 
5 @property (nonatomic, copy) NSString *name;
6 @property (nonatomic, assign) NSInteger age;
7 @property (nonatomic, assign) BOOL sex;
8 
9 @end
#import "Person.h"

@implementation Person

//归档
- (void)encodeWithCoder:(NSCoder *)aCoder
{
    [aCoder encodeObject:self.name forKey:@"name"];
    [aCoder encodeInteger:self.age forKey:@"age"];
    [aCoder encodeBool:self.sex forKey:@"sex"];
}

//解档
- (instancetype)initWithCoder:(NSCoder *)aDecoder
{
    if (self == [super init]) {
        self.name = [aDecoder decodeObjectForKey:@"name"];
        self.age = [aDecoder decodeIntegerForKey:@"age"];
        self.sex = [aDecoder decodeBoolForKey:@"sex"];
    }
    return self;
}

@end
#import "ViewController.h"
#import "Person.h"

@interface ViewController ()
@property (nonatomic, strong) Person *person;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    [self saveCacheData];
}

- (Person *)person
{
    if (_person == nil) {
        _person = [[Person alloc] init];
        _person.name = @"xinjinying";
        _person.age = 11;
        _person.sex = YES;
    }
    return _person;
}

#pragma mark - 归档存储缓存数据
- (void)saveCacheData
{
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *cachePath = [path stringByAppendingPathComponent:@"tooyoung.toosimple"];
    NSLog(@"%@",cachePath);
    [NSKeyedArchiver archiveRootObject:self.person toFile:cachePath];
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *readDataPath = [path stringByAppendingPathComponent:@"tooyoung.toosimple"];
    NSLog(@"%@",readDataPath);
    Person *person = [NSKeyedUnarchiver unarchiveObjectWithFile:readDataPath];
    NSLog(@"%@-%zd-%d",person.name,person.age,person.sex); 
}

2.1>生成plist文件

#pragma mark - 写入读取plist文件
- (void)writeAndReadPlistFile
{
    //读取plist
    NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"plistdemo" ofType:@"plist"];
    NSMutableDictionary *data = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];
    
    //添加一项内容
    [data setObject:@"yoyoyo" forKey:@"key"];
    
    //存入yoyoyo.plist
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *writePath = [path stringByAppendingPathComponent:@"yoyoyo.plist"];
    [data writeToFile:writePath atomically:YES];
    
}

3.1>NSUserDefault(项目里一般用来存用户名,密码,accessToken,版本号...)

 1 #pragma mark - NSUserdefaults
 2 - (void)userDefaultCache
 3 {
 4     //
 5     NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
 6     [userDefaults setObject:@"fuck" forKey:@"name"];
 7     [userDefaults synchronize];
 8 }
 9 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
10 {
11     //
12     NSUserDefaults *userDetaults = [NSUserDefaults standardUserDefaults];
13     NSString *name = [userDetaults objectForKey:@"name"];
14     NSLog(@"%@",name);
15 }    

 

待续...

 

发表评论
用户名: 匿名