Snail—OC学习之本地数据持久化(归档)

#import <Foundation/Foundation.h>
#import "Dog.h"

int main(int argc, const char * argv[])
{

    @autoreleasepool {

        NSString * filePath = @"/Users/student/Desktop/snail/array.data";

        //对官方类创建的对象进行存储
        NSArray * array = @[@"one",@"two",@"three"];

        //-------------------------归档--------------------------
        //将array归档为文件 后缀一般为.data  .data文件是二进制文件 打不开
        /*
         参数
         第一个参数 归档的对象
         第二个参数 文件的路径
         */
        [NSKeyedArchiver archiveRootObject:array toFile:filePath];

        //-------------------------解档--------------------------
        NSArray * arr = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
        /*
         (
         one,
         two,
         three
         )
         */
        NSLog(@"%@",arr);

        //------------对自定义类型的对象进行归、解档-----------------
        /*
         对自定义类型的对象进行归档时,需要实现一个协议(NSCoding),并且实现协议中得方法
         新建一个dog类 里面有名字name和age属性
         */
        NSString * dogPath = @"/Users/student/Desktop/snail/dog.data";
        Dog * dog = [[Dog alloc] init];
        dog.name = @"刀刀";
        dog.age = 23;

        //----------------------归档--------------------
        BOOL ret1 = [NSKeyedArchiver archiveRootObject:dog toFile:dogPath];
        if (ret1) {
            NSLog(@"归档成功");
        }else{
            NSLog(@"失败");
        }

        //----------------------解档--------------------
        Dog * dog1 = [NSKeyedUnarchiver unarchiveObjectWithFile:dogPath];
        NSLog(@"%@",dog1.name);
    }
    return 0;
}

Dog.h

#import <Foundation/Foundation.h>

//NSCoding 实现这个协议
@interface Dog : NSObject <NSCoding>

@property NSString * name;
@property int age;

@end

Dog.m

#import "Dog.h"

@implementation Dog

//归档自定义对象时调用的方法
- (void)encodeWithCoder:(NSCoder *)aCoder{

    //key的值是可以随便写的 但是在解档的方法里 要跟key的值一样的

    //name是NSString类型 用encodeObject方法
    [aCoder encodeObject:self.name forKey:@"NAME"];
    //age是int类型,用encodeInt方法
    [aCoder encodeInt:self.age forKey:@"AGE"];
}

//解档自定义对象时调用的方法
- (id)initWithCoder:(NSCoder *)aDecoder{

    if (self = [super init]) {
        self.name = [aDecoder decodeObjectForKey:@"NAME"];
        self.age = [aDecoder decodeIntForKey:@"AGE"];
    }
    return self;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-04 09:27:37

Snail—OC学习之本地数据持久化(归档)的相关文章

Snail—OC学习之本地数据持久化(plist)

plist文件的格式 plist是一种数据持久化的文件 1.最外层通常为数组或者字典 2.plist里面的数据 只局限于数组.字典.逻辑值(BOOL).NSNumber.NSData.NSDate.字符串等数据类型 3.无法存储自定义类型的对象 plist作用 1.不适用它作为缓存 无法存储自定义类型的对象 2.通常存储长时间不容易发生变化的数据.国家.省市区.汽车品牌.项目的info.plist工程的设置信息 3.占用内存小 #import <Foundation/Foundation.h>

【OC学习-27】对象的归档以及解归档——标准数据和自定义数据的例子

对象归档?就是把对象的数据保存成文件实现数据的加密(即在文档中不是明文显示)和永久储存. 需要使用时,则从文件中恢复即可. (1)标准的数据 //main.m文件 #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { //把一个数组进行归档 //创建一个文件路径 NSString *homePath=NSHomeDirectory(); NSString *f

Unity游戏开发学习之路——数据持久化

数据持久化 谈到数据持久化,在Unity的游戏开发中十分重要的,不管是是在本地和服务器端,数据持久化都是我们学习的难点,数据持久化的技术有很多种,这里只选取几种,目前也是我所学到的,在接下来的时间里会陆续整理到这里. Part1:PlayerPrefs类 这是unity圣典中给出的, PlayerPrefs 游戏存档 Description 描述 在游戏会话中储存和访问游戏存档.这个是持久化数据储存,比如保存游戏记录. Editor/Standalone 编辑器 / 桌面平台 Mac OS 在M

本地数据持久化方法

http://www.jianshu.com/p/86ea6da905cf http://www.cocoachina.com/industry/20130328/5908.html 1. 属性列表(plist)NSUserDefaults 属性列表是一种明文的轻量级存储方式,其存储格式有多种,最常规格式为XML格式.在我们创建一个新的项目的时候,Xcode会自动生成一个info.plist文件用来存储项目的部分系统设置.plist只能用数组(NSArray)或者字典(NSDictionary)

数据持久化(归档和反归档操作 ,清除缓存等等)

数据持久化的步骤 // 1.指定前往哪个文件夹 // 2,用字符串接收路径 // 3.拼接文件夹路径 // 4.写入本地或者归档操作 // 注 :如果是复杂对象归档 ,要签订NSCoding方法 .并且实现两个协议方法,放在数组里的复杂对象归档也要签协议 苹果手机为了保证自己数据上的绝对的安全设计了沙盒文件 ,每一个应用程序都配备了自己的沙盒文件 ,每一次运行 ,文件夹的名字就会变成一个没有任何规律的字符串 复杂对象写入到本地 ,主要至我们自己创建的对象写入到本地, 也叫归档和反归档操作 结构体

Redis学习总结(1)——数据持久化

以前研究Redis的时候,很多东西都不太明白,理解得也不太深,现在有时间重新拾起来看看,将一些心得记录下来,希望和大家一起探讨. 一.简介 Redis是一个单线程高可用的Key-Value存储系统,和Memcached类似,但是实际使用上最大的区别有两方面: Redis支持多种数据结构类型的value,比如string(字符串).list(链表).set(集合).zset(sorted set --有序集合)和hash(哈希类型): Memcached在出现系统瘫痪的情况下,无法实现系统恢复,而

Snail—OC学习之文件操作(非读写)

#import <Foundation/Foundation.h> //宏定义一个文件夹的路径信息 #define path @"/Users/XXX/Desktop/Snail" //宏定义一个文件的路径 #define filePath @"/Users/XXX/Desktop/Snail/Snail3/Snail.txt" int main(int argc, const char * argv[]) { @autoreleasepool { //

ios学习笔记-数据持久化

沙盒 沙盒是一种数据安全策略,只允许自己的应用访问目录.可以使用NSHomeDirectory()获取. ios沙盒下有三个子目录: 1.Documents目录:用于存储比较大的文件活着需要频发女更新的数据,需要持久化的数据.获取代码: NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; 2.Library目录:

Snail—OC学习之数组NSArray

NSArray是OC中的数组,是用来存储对象的.可以是重复的.有序的 新建一个Dog的类,在main.m中引入Dog的头文件 #import <Foundation/Foundation.h> #import "Dog.h" int main(int argc, const char * argv[]) { @autoreleasepool { Dog * dog = [[Dog alloc] init]; //数组的创建方式 //空数组创建 NSArray * arrry