ios数据存储的几种常用方式

1、NSKeyarchiver

2、NSUserDefault

3、PList

4、Write

5、SQLite

6、KeyChain

示例:

1、NSKeyarchiver

将数据存入文件:

NSString *rootDir = NSHomeDirectory();
NSString *path = [rootDir stringByAppendingPathComponent:@"test.txt"];

NSMutableData *data = [NSMutable data];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingMutableData:data];

NSArray *array = @[@"one",@"two"];
[archiver encodeInt:100 forKey:@"age"];//相当于SharedPreference的putInteger(key,value);
[archiver encodeObject:array forKey:@"names"];//
[archiver finishEncoding];//此方法调用,则将数据存入data
[archiver release];

if([data writeToFile:path atomically:YES]){
    NSLog(@"对象存入文件成功");
}

将数据从文件中取出:

NSData *data = [NSData dataWithContentOfFile:path];
NSKeyedArchiver *unarchiver =[[NSKeyedArchiver alloc] initForReadingWithData:data];
int age = [unarchiver decodeIntForKey:@"age"];//取出值
NSArray *array = [unarchiver decodeObjectForKey:@"names"];
[archiver release];

2、NSUserDefault:用来保存应用程序设置和属性、用户保存的数据。用户再次打开程序或开机后这些数据仍然存在。NSUserDefaults可以存储的数据类型包 括:NSData、NSString、NSNumber、NSDate、NSArray、NSDictionary。如果要存储其他类型,则需要转换为前 面的类型,才能用NSUserDefaults存储。

//1. 存入数据
NSArray *array = @[@"abc",@"d"];
NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
[userDefault setInteger:123 forKey:@"number"];
[userDefault setObject:array forKey:@"array"];
[userDefault synchronize];//存入文件

//2. 取出数据
NSInteger number = [userDefault integerForKey:@"number"];
NSArray *array = [userDefault objectForKey:@"array"];

3、PList:存储简单基础数据类型

4、Write:

第一步:获取文件即将保存的路径。

1 NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,  NSUserDomainMask,YES);
2 NSString *ourDocumentPath =[documentPaths objectAtIndex:0];
3
4 //使用C函数NSSearchPathForDirectoriesInDomains来获得沙盒中目录的全路径。该函数有三个参数,目录类型、he domain mask、布尔值。其中布尔值表示是否需要通过~扩展路径。而且第一个参数是不变的,即为NSSearchPathDirectory 。在IOS中后两个参数也是不变的,即为:NSUserDomainMask 和 YES。

或者使用NSHomeDirectory方法获取sandbox路径。

NSString *sandboxPath = NSHomeDirectory();
NSString *documentPath = [sandboxPath stringByAppendingPathComponent:@"Documents"];
//将Documents添加到sandbox路径上

两者的区别是:使用NSSearchPathForDirectoriesInDomains比在NSHomeDirectory后面添加Document更加安全。因为该文件目录可能在未来发送的系统上发生改变。

第二步:生成在该路径下的文件:

NSString *FileName=[documentDirectory stringByAppendingPathComponent:saveFileName];
//saveFileName就是保存文件的文件名

第三步:写入数据

[data writeToFile:saveFileName atomically:YES];
//将NSData类型对象data写入文件,文件名为saveFileName

第四步:从文件中读取数据

NSData data=[NSData dataWithContentsOfFile:saveFileName options:0 error:NULL];
//从saveFileName中读取出数据

5、SQLite

第一步:需要添加SQLite相关的库以及头文件:

在项目文件的Build Phases下,找到Link Binary Library(ies),添加libsqlite3.0.dylib(libsqlite3.dylib与前者的区别暂时不知,两者应该差不多);在项目文件中头文件或者源文件中添加头文件#import "/usr/include/sqlite3.h"。

第二步:使用SQLite:

NSArray *documentsPaths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask , YES);
NSString *databaseFilePath=[[documentsPaths objectAtIndex:0] stringByAppendingPathComponent:@"mydb"];//打开数据库

if (sqlite3_open([databaseFilePath UTF8String], &database)==SQLITE_OK)


       
NSLog(@"sqlite dadabase is opened."); 
}
else{

return;

}//打开不成功就返回

//在打开了数据库的前提下,如果数据库没有表,那就开始建表
char *error; 
const char *createSql="create table(id integer primary key
autoincrement, name text)";
if (sqlite3_exec(database, createSql, NULL, NULL,
&error)==SQLITE_OK) { 
       
NSLog(@"create table is ok."); 
}
else
{
      
NSLog(@"error: %s",error);
      
sqlite3_free(error);//每次使用完毕清空error字符串,提供给下一次使用
}

//建表完成之后,就开始插入记录:

const char *insertSql="insert into a person (name)
values(‘gg’)"; 
if (sqlite3_exec(database, insertSql, NULL, NULL,
&error)==SQLITE_OK) { 
       
NSLog(@"insert operation is ok."); 
}

else
{
      
NSLog(@"error: %s",error);
      
sqlite3_free(error);//每次使用完毕清空error字符串,提供给下一次使用
}

//查询记录:

const char *selectSql="select
id,name from a person"; 
sqlite3_stmt *statement; 
if (sqlite3_prepare_v2(database,selectSql, -1,
&statement, nil)==SQLITE_OK)

       
NSLog(@"select operation is ok."); 
}
else
{
      
NSLog(@"error: %s",error);
      
sqlite3_free(error);

while(sqlite3_step(statement)==SQLITE_ROW)

int _id=sqlite3_column_int(statement,
0); 
NSString *name=(char*)sqlite3_column_text(statement,
1); 
NSLog(@"row>>id %i, name
%s",_id,name); 
}
sqlite3_finalize(statement);

//最后,关闭数据库:

sqlite3_close(database);

注意:写入数据库,字符串可以采用char方式,而从数据库中取出char类型,当char类型有表示中文字符时,会出现乱码。这是因为数据库默认使用ascII编码方式。所以要想正确从数据库中取出中文,需要用NSString来接收从数据库取出的字符串

时间: 2024-07-28 23:49:19

ios数据存储的几种常用方式的相关文章

【iOS开发-75】iOS数据存储的三种简单方式:plist、preference以及用NSCoding存储对象

实际开发中,存储数据主要是用SQLite.而在练习中,我们主要用如下三种存储方式. (1)利用plist存储简单地NSString.NSArray.NSDictionary等. (2)利用preference存储,和上面的类似,存储的是简单的数据,本质上还是一个plist文件. (3)利用NSCoding存储对象这些复杂的数据,本质上是一个data文件,需要被存储的类遵守NSCoding协议并实现init和encode方法. 代码如下: --在ViewController.m中 - (void)

iOS数据存储的几种方式

iOS的数据存储是iOS应用开发的重要知识点: 关于这方面知识,网上有很多介绍,但对于代码层次的使用方式并未有系统全面介绍.此文章针对iOS稍熟悉的童鞋,需要对CoreData的原理有一定的了解.目前存储方式大概有以下几种: NSKeyedArchiver  适用简单数据加密 NSUserDefaults  适用配置参数 Write  文件操作,同NSKeyedArchiver SQLite3  操作较复杂,不建议使用. CoreData  取代SQLite3,但要遵循NSManagedObje

python里读写excel等数据文件的几种常用方式

python处理数据文件第一步是要读取数据,文件类型主要包括文本文件(csv.txt等).excel文件.数据库文件.api等. 下面整理下python有哪些方式可以读取数据文件. 1. python内置方法(read.readline.readlines) read() : 一次性读取整个文件内容.推荐使用read(size)方法,size越大运行时间越长 readline() :每次读取一行内容.内存不够时使用,一般不太用 readlines() :一次性读取整个文件内容,并按行返回到lis

IOS数据存储 —— 2 存储方式

IOS数据存储方式 iOS开发常用数据存储方式有:plist.偏好设置 NSUserDefaults.对象归档 NSKeyedArchiver.SQLite3和Core Data 1. plist文件 存储 plist文件通常用于储存用户设置,利用xml属性列表归档NSDictionary.NSArray.NSNumber等类型数据 在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用 注意:plist不能存储自定义对象 2. 偏好设置 NSUserDefaults 偏好设置

iOS - 数据存储方式(本地化)

iOS中数据存储方式 一般使用以下4种: 1.NSKeyedAchiever//序列化 存放对象 2.NSUserDefaults//本质是plist存储 NSData.NSString.NSNumber.NSDate.NSArray.NSDictionary //存储到沙盒下的Library/Preferences/ 3.writeToFile:atomically://直接写文件方式:NSString.NSArray.NSDictionary.NSData.NSNumber,存放在一个属性列

Andriod中数据存储的五种方式

数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 4 使用ContentProvider存储数据5 网络存储数据 下面将为大家一一详细介绍. 第一种: 使用SharedPreferences存储数据 SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置比如窗口状态,一般在 Activity中 重载窗

Android——数据存储(四种方式之一)SharedPrefereces

Android--数据存储(四种方式) 1.SharedPrefereces   轻量级.XML  存储文件名,数据保存在data/data/basepackage/shared_prefs/myopt.xml中   实例-收藏-记住密码自动登录 //一种轻量级的数据存储方式//通过KEY 存入数据--putxxxx(key,value) 取出数据--getxxxx(key  default)   2.读写SD卡  SD的根目录  适用于数据流读写 3.SQLite  轻量级.dp文件多用于手机

Android——数据存储(四种方式之二)读写SD卡

Android--数据存储(四种方式) 1.SharedPrefereces 只能保存一些简单的数轻量级.XML  存储文件名, 数据保存在data/data/basepackage/shared_prefs/myopt.xml中    实例-收藏-记住密码自动登录 //一种轻量级的数据存储方式//通过KEY 存入数据--putxxxx(key,value) 取出数据--getxxxx(key  default) 2.读写SD卡  SD的根目录  适用于数据流读写 实现步骤:加入读写SD卡权限

Android开发之数据存储的四种方式之SharedPreferences

Android项目开发中使用的数据存储方式有:网络存储.sqlite存储.File存储和SharedPreferences存 储,四种存储方式对应的Demo别人是NetworkDemo.SqliteDemo.FileDemo和SharedPreferencesDemo, 根据应用的场景选择其中一种或多种方式,比如在登录界面验证,需要将用户名和密码通过SharedPreferences方式保存,注册信息的时候需要通 过网络将数据存储到后台数据库中.结合一个登录界面的验证,使用SharedPrefe