objective C中数据持久化方式1--对象归档

第一、数据持久化的方式:

NSKeyedArchiver--对象归档

属性列表化(NSArray、NSDictionary、NSUserDefault)

SQlite数据库、CoreData数据库

其中第一、二种方式针对数据量小的数据,第三种方式针对大数据,归档的文件是加密的,属性列表明文的。

归档的形式;

对foundation库中对象进行归档

自定义对象的归档(需要实现归档协议:NSCoding)

第二 最简单归档和解归档的实现代码:

 

    @autoreleasepool {

        NSString *homeDictory=NSHomeDirectory();

        NSArray *array=[NSArray arrayWithObjects:@"one",@"two",@"three",nil];

        NSString *homePath=[homeDictory stringByAppendingPathComponent:@"Desktop/test.archive"];

        if(![NSKeyedArchiver archiveRootObject:array toFile:homePath])

        {

            NSLog(@"归档失败");

        }else

        {

            NSArray *data=[NSKeyedUnarchiver unarchiveObjectWithFile:homePath];

            NSLog(@"%@",data);

        

        }

        

        NSLog(@"Hello, World!");

        

    }

第四、复杂的内容归档

 

使用NSData实例作为归档的存储数据,添加归档的内容(设置key和value),完成归档,将归档内容存入磁盘

解归档步骤:从磁盘读取文件,生成NSData实例,根据data实例创建或初始化归档实例,解归档,根据key访问value的值

 

        NSString *homeDictory=NSHomeDirectory();

        NSString *homePath=[homeDictory stringByAppendingPathComponent:@"Desktop/usertest.archive"];

        

        NSMutableData *data=[NSMutableData data];

        NSKeyedArchiver *archiver=[[NSKeyedArchiver alloc] initForWritingWithMutableData:data];

        

        NSArray *nameArray=[NSArray arrayWithObjects:@"andy",@"yang", nil];

        [archiver encodeInt:100 forKey:@"age"];

        [archiver encodeObject:nameArray forKey:@"names"];

        [archiver finishEncoding];

        [archiver release];

        

        if ([data writeToFile:homePath atomically:YES])

        {



            NSData *data2=[NSData dataWithContentsOfFile:homePath];

            NSKeyedUnarchiver *unarchiver=[[NSKeyedUnarchiver alloc] initForReadingWithData:data2];

            int age=[unarchiver decodeIntForKey:@"age"];

            NSArray *array2=[unarchiver decodeObjectForKey:@"names"];

            NSLog(@"%d",age);

            NSLog(@"%@",array2);

            [unarchiver release];

        } else

        {

            

            NSLog(@"write to file wrong");

        }

                

        NSLog(@"Hello, World!");

        

    }


 

 

你可能感兴趣的:(objective c)