IOS数据存储

来源:互联网 发布:淘宝数据采集器破解版 编辑:程序博客网 时间:2024/06/08 19:33

1、plist文件:需要知道文件名称,适合存储数组、字符串等基础数据
2、偏好设置:不需要知道文件名称,小型数据,使用NSUserDefault调用,
OC使用[[NSUserDefaults standardUserDefaults] synchronize];
swift使用NSUserDefaults.standardUserDefaults().synchronize()
NSUserDefaults支持的数据类型有:NSNumber(NSInteger、float、double),NSString,NSDate,NSArray,NSDictionary,BOOL.

 //将NSString 对象存储到 NSUserDefaults 中    NSString *passWord = @"1234567";    NSUserDefaults *user = [NSUserDefaults standardUserDefaults];    [user setObject:passWord forKey:@"userPassWord"];  //从NSUserDefaults取出NSString     NSUserDefaults *user = [NSUserDefaults    standardUserDefaults];         NSString *passWord = [ user objectForKey:@"userPassWord"];

NSUserDefaults 存储的对象全是不可变的(这一点非常关键,弄错的话程序会出bug),例如,如果我想要存储一个 NSMutableArray 对象,我必须先创建一个不可变数组(NSArray)再将它存入NSUserDefaults中去,代码如下:

 NSMutableArray *mutableArray = [NSMutableArray arrayWithObjects:@"123",@"234", nil];    NSArray * array = [NSArray arrayWithArray:mutableArray];    NSUserDefaults *user = [NSUserDefaults standardUserDefaults];    [user setObject:array forKey:@"记住存放的一定是不可变的"];
/*-------------------------错误的赋值方法-------------------*/    NSUserDefaults *user = [NSUserDefaults standardUserDefaults];    //这样写后,mutableArray 就变成了不可变数组了,如果你要在数组中添加或删除数据就会出现bug    NSMutableArray *mutableArray = [user objectForKey:@"记住存放的一定是不可变的"];/*-------------------------正确的赋值方法-------------------*/    NSUserDefaults *user = [NSUserDefaults standardUserDefaults];    //可以用alloc 方法代替    NSMutableArray *mutableArray = [NSMutableArray arrayWithArray:[user objectForKey:@"记住存放的一定是不可变的"]];

3、core Data 大型数据
4、SQLite数据库

sqlite3_prepare_v2(sqlite3Database, query, -1, &compiledStatement, NULL);int sqlite3_prepare_v2(  sqlite3 *db,            /* Database handle */数据指针  const char *zSql,       /* SQL statement, UTF-8 encoded */sql语句,使用UTF-8编码  int nByte,              /* Maximum length of zSql in bytes. */如果nByte小于0,则函数取出zSql中从开始到第一个0终止符的内容;如果nByte不是负的,那么它就是这个函数能从zSql中读取的字节数的最大值。如果nBytes非负,zSql在第一次遇见’/000/或’u000’的时候终止  sqlite3_stmt **ppStmt,  /* OUT: Statement handle */能够使用sqlite3_step()执行的编译好的准备语句的指针,如果错误发生,它被置为NULL,如假如输入的文本不包括sql语句。调用过程必须负责在编译好的sql语句完成使用后使用sqlite3_finalize()删除它。  const char **pzTail     /* OUT: Pointer to unused portion of zSql */上面提到zSql在遇见终止符或者是达到设定的nByte之后结束,假如zSql还有剩余的内容,那么这些剩余的内容被存放到pZTail中,不包括终止符);

NSCoding首先是一个协议,类继承它,此类的实例才能被编码(encode)和译码(decode),继承了这个类,也就实现两个方法
1.initWithCoder(NSCoder:coder)//从coder中读取数据,保存到相应的变量中,即反序列化数据
2.encodeWithCoder(NSCoder:coder)//读取实例变量,并把这些数据写到coder中去。序列化数据
注意:还有一个抽象类(NSCoder)与其区别,NSCoder不能被实例化,但是可以被继承,有两个方便的实例子类。可以直接只用器归档和解档
1.NSKeyedUnarchiver 从二进制流读取对象。
2.NSKeyedArchiver 把对象写到二进制流中去

0 0
原创粉丝点击