几种数据存储方式

归档也叫序列化,是将文件存在硬盘,解档是从硬盘还原

5种方式:

第一种、使用属性列表进行归档

如果对象是NSString,NSDictionary,NSArray,NSData或者NSNumber,可以使用writeToFile:atomically方法将数据写到文件,注意这种方式是明文

sample:

?
1
2
3
4
5
6
7
NSArray *array = @[@ "abc" ,@ "123" , @23 .4];
if ([array writeToFile:@ "text.plist" atomically:YES])
{
     NSLog(@ "success" );
}
NSArray *arr2=[NSArray arrayWithContentsOfFile:@ "text.plist" ];
NSLog(@ "%@" ,arr2);

第二、NSKeyedArchiver--对象归档,数据会加密

1、对于NSArray或者NSDictionary sample code:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
   /***归档对象****/
   NSArray *array = @[@ "abc" ,@ "123" , @23 .4];
   NSString *homePath = NSHomeDirectory();
   NSString *path = [homePath stringByAppendingPathComponent:@ "test.arc" ];
   
  // BOOL success = [NSKeyedArchiver archiveRootObject:array toFile:path];
   BOOL success=[NSKeyedArchiver archiveRootObject:array toFile:path];
   if (success) {
       NSLog(@ "archive success" );
   }
   
   /***解归档****/
   NSArray *array2 =[NSKeyedUnarchiver unarchiveObjectWithFile:path];
NSLog(@ "%@" ,array2);

结果:

success

2013-12-28 22:14:25.353 ArchiverDemo1[1206:303] (

abc,

123,

"23.4"

)

2、如果是其他类型的对象存储到文件,可以利用NSKeyedArchiver类创建带键的档案来完成

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
NSString *homePath = NSHomeDirectory();
NSString *path = [homePath stringByAppendingPathComponent:@ "archiver2.archiv" ];
NSMutableData *data = [NSMutableData data];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
NSArray *array = @[@ "jack" ,@ "tom" ];
[archiver encodeInt: 100 forKey:@ "age" ];
[archiver encodeObject:array forKey:@ "names" ];
[archiver finishEncoding];
[archiver release];
 
BOOL success = [data writeToFile:path atomically:YES];
if (success) {
     NSLog(@ "archive success" );
}
 
/***解归档对象**/
 
NSData *data2 = [NSData dataWithContentsOfFile:path];
NSKeyedUnarchiver *unArchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data2];
int age = [unArchiver decodeIntForKey:@ "age" ];
NSArray *names = [unArchiver decodeObjectForKey:@ "names" ];
[unArchiver release];
NSLog(@ "age=%d,names=%@" ,age,names);


3、自定义对象进行归档,需要实现归档协议NSCoding两个方法

对属性编码,归档的时候会调用

- (void)encodeWithCoder:(NSCoder *)aCoder

//对属性解码,解归档调用

- (id)initWithCoder:(NSCoder *)aDecoder

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//对属性编码,归档的时候会调用
- ( void )encodeWithCoder:(NSCoder *)aCoder {
     [aCoder encodeInt:_age forKey:AGE];
     [aCoder encodeObject:_name forKey:NAME];
     [aCoder encodeObject:_email forKey:EMAIL];
     [aCoder encodeObject:_password forKey:PASSWORD];
     
}
 
//对属性解码,解归档调用
- (id)initWithCoder:(NSCoder *)aDecoder {
     self = [ super init];
     if (self != nil) {
         _age = [aDecoder decodeIntForKey:AGE];
         self.name = [aDecoder decodeObjectForKey:NAME];
         self.email = [aDecoder decodeObjectForKey:EMAIL];
         self.password = [aDecoder decodeObjectForKey:PASSWORD];
     }
     return self;
}


第三种:NSUserDefaults

sample code:

?
1
2
[[NSUserDefaults standardUserDefaults] setObject:authData forKey:@ "SinaWeiboAuthData" ];
[[NSUserDefaults standardUserDefaults] synchronize];

第四种、SQlite数据库、CoreData数据库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值