学习OC必不可少需要一些数据的稳定存取,根据数据量的不同以及数据类型的不同我们会选择多种不同的存储方式,然而我们必须对数据的类型了然于胸!
先说说数据类型吧:首先数据分为
NSUserDefaults,文件解归档,FMDB数据库操作,coredata数据库操作!
1.NSUserDefaults
用户轻量级的数据持久化,主要用于保存用户程序的配置等信息,以便下次启动程序后能恢复上次的设置。
该数据实际上是以“键值对”形式保存的(类似于NSDictionary),因此我们需要通过key来读取或者保存数据(value)。
使用很简单@存
一般只需要
[[NSUserDefaults standardUserDefaults] setInteger:1 forKey:@"liu"];
[[NSUserDefaults standardUserDefaults] setObject:@1 forKey:@"abc"];
当我们设置的为int,bool等一系列的值的时候我们只需要直接把值设置进去,然后给值设置对应的键上去就好了,
如果是设置object对象类型,就能保存多一点的数据,比如数组,字典等数据
设置完了之后必须要在后面加上如下,让数据同步化到磁盘,才能真正把设置好的数据保存到本地
[[NSUserDefaults standardUserDefaults] synchronize];
@取
获取数据也非常简单,不管你在那个类,只要是同一个项目中,只需要
int i = [[NSUserDefaults standardUserDefaults] integerForKey:@"liu"];
就能轻松获取到之前保存的数据,非常简单其他的雷同。
2.数据解归档
分两种,第一种是系统对象的解归档,另外一种使我们自定义类也要能完成解归档
@系统对象的解归档
//归档大致思路:给定一个本地路径,然后把数据存入这个本地路径
NSString *homeDirectory = NSHomeDirectory();
NSArray *array = @[@123,@343,@"asdas"];
NSString *directoryA = [homeDirectory stringByAppendingPathComponent:@"array.archive"];
if ([NSKeyedArchiver archiveRootObject:array toFile:directoryA])
{
NSLog(@"归档成功");
}
//解档:只要在同一个路径下或再去获取到存入的数据
NSArray *unArray = [NSKeyedUnarchiver unarchiveObjectWithFile:directoryA];
自定义一个基础数据类型和一个objective-c对象类型,进行对象归档和解档
//归档
NSString *homePath = NSHomeDirectory();
NSString *filePath = [homePath stringByAppendingPathComponent@"customContent.archive"];
NSMutableData *data = [NSMutableData data];
NSKeyedArchiver *archiver =[ [NSKeyedArchiver alloc]initForWritingWithMutableData:data];
[archiver encodeFloat:50 forKey:@"weight"];
[archiver encodeObject:@"jack" forKey:@"name"];
[archiver finishEncoding];
[data writeToFile:filePath automically:YES];
//解归档
NSData *content = [NSData dataWithContentsOfFile:filePath];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:content];
float weight = [unarchiver decodeFloatForKey:@"weight"];
NSString *name = [unarchiver decodeObjectForKey:@"name"];
@自定义对象实现解归档自定义的对象要支持归档,需要实现NSCoding协议NSCoding协议有两个方法,encodeWithCoder方法对对象的属性数据做编码处理。initWithCoder解码归档数据来初始化对象
实现NSCoding协议后,就能通过NSkeyedArchiver归档
- (id) initWithCoder:(NSCoder *)aDecoder
{
self = [super init];
if (self != nil)
{
_name =[ [aDecoder decodeObjectForKey:@"name"]copy];
_age = [[aDecoder decodeIntForKey:@"age"]];
_apples = [[aDecoder decodeObjectForKey:@"apples"]retain];
}
return self;
}
//编码方法
- (void) encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:_name forKey:@"name"];
[aCoder encodeObject:_apples forKey:@"apples"];
[aCoder encodeInt:_age forKey:@"age"];
}
注意:归档后的文件是加密的
3.SQlite数据库操作
@熟悉sql数据
1.创建表
CREATE TABLE IF NOT EXISTS UserTable (username TEXT primary key ,password TEXT ,email TEXT);
2.插入一条数据
INSERT OR REPLACE INTO UserTable (username , password,email) VALUES (?,?,?);
3.更新一条数据
UPDATE UserTable set password = '123456' where username = 'wxhl';
4.查询数据
SELECT username,password,email FROM UserTable where username = 'wxhl'
5.删除数据
DELETE FROM UserTable WHERE username = 'wxhl'
@使用数据库注意:
SQLite最新版本为3.0,使用前需要导入libsqlite3.0.dylib
数据库操作流程
1.打开数据库
2.编译Sql语句
3.执行SQL语句,读取数据
4.语句完结
5.关闭数据库
@SQLite3.0使用的时C的函数接口,常用函数如下:
sqlite3_open() /打开数据库
sqlite3_close() /关闭数据库
sqlite3_exec() /执行sql语句,例如创建表
sqlite3_prepare_v2() /编译SQL语句
sqlite3_step() /执行查询SQL语句
sqlite3_finalize() //结束sql语句
sqlite3_bind_text() //绑定参数
sqlite3_column_text() //查询字段上的数据
@创建数据表
@插入数据
@查询数据