数据处理(一)

来源:互联网 发布:丧尸围城2优化补丁 编辑:程序博客网 时间:2024/06/05 14:13

在实际项目开发中,归档解档以及writetofile用的相对较少,但也必须了解一下。

归档解档

一、归档解档的理解如下:

/** *  可以存储自定义模型对象 *  1.归档相对于polist存储而言,它可以直接存储自定义模型对象,而polist文件需要将模型转化为字典才可以存储自定义对象模型 *  2.归档不能存储大批量数据(想比较Sqlite而言),存储数据到文件是将所有的数据一次性存储到文件中,从文件中读取数据也是一次性读取所有的数据 *  弊端:增删改查的性能低 */

二、对象的.h文件遵守NSCoding协议,在.m文件中实现相应的两个方法,本文以Student作为例子。

#import <objc/runtime.h>@implementation Student//利用runtime机制进行归档反归档/** * 当一个对象要归档的时候就会调用这个方法接档 * 当前那些属性需要解档 */-(id)initWithCoder:(NSCoder *)aDecoder{//解档    if (self = [super init]) {        unsigned int outCount;        Ivar * ivars = class_copyIvarList([self class], &outCount);        for (int i = 0; i < outCount; i ++) {            Ivar ivar = ivars[i];            NSString * key = [NSString stringWithUTF8String:ivar_getName(ivar)];            [self setValue:[aDecoder decodeObjectForKey:key] forKey:key];        }    }    return self;}/** * 当一个对象要归档的时候就会调用这个方法归档 * 当前那些属性需要归档 */-(void)encodeWithCoder:(NSCoder *)aCoder{//归档        unsigned int outCount;    Ivar * ivars = class_copyIvarList([self class], &outCount);    for (int i = 0; i < outCount; i ++) {        Ivar ivar = ivars[i];        NSString * key = [NSString stringWithUTF8String:ivar_getName(ivar)];        [aCoder encodeObject:[self valueForKey:key] forKey:key];    }}


三、归档

+ (void)datastorage_archiver{    NSMutableArray * array = [NSMutableArray array];    NSArray * sexArray = [NSArray arrayWithObjects:@"男",@"女", nil];    NSArray * hobbyArray = [NSArray arrayWithObjects:@"篮球",@"足球",@"乒乓球",@"橄榄球",@"棒球",@"羽毛球", nil];    for (int i = 0; i < 100; i ++) {        Student * student = [[Student alloc] init];        if (i == 50) {            student.age = 100;            student.name = @"fuzongjian";            student.hobby= @"健身";            student.sex = @"男";        }else{            student.age = arc4random() % 20;            student.name = [NSString stringWithFormat:@"我是%d号",i];            student.sex = [sexArray objectAtIndex:arc4random() % 2];            student.hobby = [hobbyArray objectAtIndex:arc4random() % 6];        }        [array addObject:student];    }    [NSKeyedArchiver archiveRootObject:array toFile:@"/Users/chenshuao/Desktop/student.txt"];}

四、解档

+ (void)datastorage_unarchiver{    NSArray * array = [NSKeyedUnarchiver unarchiveObjectWithFile:@"/Users/chenshuao/Desktop/student.txt"];    for (int i = 0 ; i < array.count; i ++ ) {        Student * student = array[i];         NSLog(@"%@ %d",student.hobby,i);    }}

WriteToFile

一、WriteToFile理解如下:

/** *  只能存储OC常用数据类型,NSString、NSDictionary、NSArray、NSData、NSNumber、NSDate、Boolean *  polist 只能识别字典和数组 */

二、存储

+ (void)writetofile_test{    NSArray * array = [NSArray arrayWithObjects:@"fu",@"zong",@"jian", nil];    [array writeToFile:@"Users/chenshuao/Desktop/write.polist" atomically:YES];}

三、读取

+ (void)readfromfile_test{    NSArray * array =[NSArray arrayWithContentsOfFile:@"Users/chenshuao/Desktop/write.polist"];     NSLog(@"%@",[array firstObject]);}

一般来说,以什么形式(比如数组)存储,读取就以什么形式(比如数组)接收。


代码传送门:https://github.com/fuzongjian/DataStorage.git


0 0
原创粉丝点击