`

ios 数据持久化的三种方式

    博客分类:
  • IOS
阅读更多

IOS常用的三种本地数据持久化方式:

1:属性序列化列表 存储到文件 plist;

2:归档序列化,对模型数据进行归档;

3:本地数据库存储,嵌入式sqlite;

其实这三种方式都是把数据存储到本地文件里边,只是实现方式和使用的场景不同而已,复杂程度从上到下增加。

除此之外,还有一种方式存储数据,就是使用NSUserDefaults,它已键值对的形式记录应用程序的全局设置,其实settings.bundle里边的数据就是存在NSUserDefaults的。

 

主要代码如下:

 

方式一:plist

 

//先获取plist文件路径
NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
	NSString *documentDirectory = [path objectAtIndex:0];
	filePath = [documentDirectory stringByAppendingPathComponent:@"xxx.plist"];
//把数据写入plist
NSArray *arr = [[NSArray allocl] initWithObjects:A,B,C,nil];
[arr writeToFile:self.filePath atomically:YES];

//从plist取数据
NSMutableArray *arr = [[NSMutableArray alloc] initWithContentsOfFile:filePath];

 

方式二:archiver

 

//创建继承NSCoding,NSCopying协议的数据模型User,必须实现以下三个方法:
@synthesize passport;
@synthesize password;
@synthesize nickname;
@synthesize remark;

- (void)encodeWithCoder:(NSCoder *)encoder{
	[encoder encodeObject:passport forKey:kPassportKey];
	[encoder encodeObject:password forKey:kPasswordKey];
	[encoder encodeObject:nickname forKey:kNicknameKey];
	[encoder encodeObject:remark forKey:kRemarkKey];
}

- (id)initWithCoder:(NSCoder *)decoder{
	if (self=[super init]) {
		self.passport = [decoder decodeObjectForKey:kPassportKey];
		self.password = [decoder decodeObjectForKey:kPasswordKey];
		self.nickname = [decoder decodeObjectForKey:kNicknameKey];
		self.remark = [decoder decodeObjectForKey:kRemarkKey];
	}
	return self;
}

- (id)copyWithZone:(NSZone *)zone{
	User *copy = [[[self class] allocWithZone:zone] init];
	passport = [self.passport copy];
	password = [self.password copy];
	nickname = [self.nickname copy];
	remark = [self.remark copy];
	return copy;
}

//获取归档文件
- (NSString *)dataFilePath{
	NSArray *arr = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
	return [(NSString *)[arr objectAtIndex:0] stringByAppendingPathComponent:@"archiver"];
}

//初始化数据模型并写入归档文件
User *user = [[User alloc] init];
	user.passport = @"alec030711";
	user.password = @"abcd";
	user.nickname = @"alecchyi";
	user.remark = @"fuck";
	
	NSMutableData *data = [[NSMutableData alloc] init];
	NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
	[archiver encodeObject:user forKey:@"kData"];
	[archiver finishEncoding];
	[data writeToFile:[self dataFilePath] atomically:YES];
	[archiver release];
	[data release];
	[user release];

//从归档文件读数据
NSMutableData *data = [[NSMutableData alloc] initWithContentsOfFile:[self dataFilePath]];
	NSKeyedUnarchiver *unArchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
	User *user = [unArchiver decodeObjectForKey:@"kData"];
	[unArchiver finishDecoding];

	[data release];
	[unArchiver release];

 

 方式三:sqlite

	sqlite3 *database;
	//打开数据库,没有则创建
	if (sqlite3_open([数据库文件路径 UTF8String], &database) != SQLITE_OK) {
		sqlite3_close(database);
	}
	//创建表
	char *errorStr;
	NSString *createTable = @"drop table if exists users;create table if not exists users (id integer primary key,nickname text);";
	if (sqlite3_exec(database,[createTable UTF8String],NULL,NULL,&errorStr)!=SQLITE_OK) {
		sqlite3_close(database);
	}
	//插入数据
	for (int x=1; x<5; x++) {
		NSString *insert = [[NSString alloc] initWithFormat:@"insert or replace into users (id,nickname) values (%d,'ruby%d')",x,x];
		if (sqlite3_exec(database,[insert UTF8String],NULL,NULL,&errorStr)!=SQLITE_OK) {
			sqlite3_free(database);
		}
		[insert release];
	}
	//查询表数据
	NSString *query = @"select nickname,id from users";
	sqlite3_stmt *statememt;
	if (sqlite3_prepare_v2(database,[query UTF8String],-1,&statememt,nil)==SQLITE_OK) {
		while (sqlite3_step(statememt)==SQLITE_ROW) {
			char *rowData = (char *)sqlite3_column_text(statememt,0);
			NSString *nickname = [[NSString alloc] initWithUTF8String:rowData];
			[nickname release];
		}
	}
	sqlite3_finalize(statememt);
	//关闭数据库
	sqlite3_close(database);
	
	//关键就这几个方法和几个语句:sqlite3_open, sqlite3_exec,sqlite3_prepare_v2  sqlite3_step sqlite_finalize,sqlite3_close。

 方式三需要引入libsqlite3.lib,由于sqlite数据库是C实现的,存储也是C形式存储,所以在取出数据时需要用UTF8String转换成objecitve-c形式的字符串

分享到:
评论

相关推荐

    IOS数据持久化的几种方式

    本篇文章将详细介绍三种主要的数据持久化方法:SQLite(通过FMDB库)、Core Data以及Archiver(序列化)。 **1. SQLite (通过FMDB库)** SQLite是一个轻量级的、自包含的、开源的关系型数据库,它在iOS中广泛用于...

    ios 数据持久化存储

    本文将深入探讨iOS中的几种主要数据持久化技术:Preference(偏好设置)、文件存储、归档、数据库(SQLite)以及Core Data的使用。 1. **Preference(偏好设置)** iOS中的偏好设置,通常被称为NSUserDefaults,是...

    iOS中几种数据持久化方案.pdf

    本文将详细介绍五种常见的iOS数据持久化方案:plist文件、偏好设置(Preference)、NSKeyedArchiver(归档)、SQLite 3以及CoreData。 首先,我们来了解一下iOS的沙盒机制。每个iOS应用都有自己的专属空间,称为...

    iOS 数据持久化(二)对象归档ArchiverDemo

    iOS中有五种持久化数据的方式:属性列表、对象归档、NSUserDefaults、SQLite3和Core Data。 本文介绍对象归档来持久化数据。归档的作用就是将对象以文件的形式保存到磁盘中,以使得数据序列化和持久化。 使用归档的...

    iOS数据持久化之属性列表和归档

    iOS数据持久化之属性列表和归档,NSUserDefaults,Plist,NSKeyedArchiver

    iOS 数据持久化(三)NSUserDefaultsDemo

    iOS中有五种持久化数据的方式:属性列表、对象归档、NSUserDefaults、SQLite3和Core Data NSUserDefaults官方文档介绍: NSUserDefaults类为和默认系统类交互提供了一种编程接口。默认系统允许应用程序去定制其行为...

    iphone 数据持久化的三个实例

    本文将通过三个具体的实例深入探讨iPhone上实现数据持久化的三种方法:属性列表、对象归档和SQLite3数据库。 首先,我们来看**属性列表(Property List)**的使用。属性列表是iOS中一种简单且常用的数据存储方式,...

    ios-本地数据持久化JSON格式(自己封装好的类) 易懂好用.zip

    总结,JGGchijiuhua类为开发者提供了一种简洁的方式来处理JSON格式的数据持久化,通过简单的接口调用即可实现数据的保存和读取,降低了开发复杂度,提高了开发效率。在实际项目中,根据具体需求,还可以对类进行扩展...

    ios-一行代码持久化网络数据.zip

    在iOS开发中,数据持久化是一项重要的任务,它允许应用程序保存和恢复数据,即使应用关闭或设备重启。这个名为“ios-一行代码持久化网络数据.zip”的资源提供了一个简单而高效的解决方案,通过GitHub项目...

    ios-数据持久化.zip

    本资源“ios-数据持久化.zip”着重介绍了如何在iOS平台上实现数据的持久化存储,特别是通过归档和解档以及数据列表的方式。下面将详细讲解这些知识点。 **1. 数据持久化** 数据持久化是指将应用程序中的数据保存到...

    iOS 数据持久化(一)plistDemo

    iOS中有五种持久化数据的方式:属性列表、对象归档、NSUserDefault、SQLite3和Core Data 本文章讲述通过属性列表的方式持久化数据,这个方法也是我们平时最经常用到的方式。比如应用程序的配置和个性化的设置,一般...

    iOS之数据持久化-NSUserDefaults

    其中,NSUserDefaults是苹果提供的一种轻量级的数据持久化方式,主要用于存储少量的基本数据类型,如字符串、整数、浮点数、二进制数据等。这个教程我们将深入探讨iOS中的数据持久化,特别是如何使用NSUserDefaults...

    ios持久化保存数据

    在iOS开发中,数据持久化是至关重要的一个环节,它涉及到如何将应用程序中的数据长期存储在设备上,以便在后续的使用中能够快速恢复。"ios持久化保存数据"这个主题涵盖了几种主要的数据存储技术,包括UserDefaults、...

    iOS关于数据持久化的

    在iOS应用开发中,数据持久化是至关重要的一个环节,它允许应用程序在用户退出或设备重启后仍能保存和恢复数据。本资料主要探讨的是iOS中的数据存储方式,特别是使用FMDB库对SQLite数据库进行封装以及SQL语言的应用...

    ios-iOS数据持久.zip

    Demo里分别添加UISegmentedControl、UIActivityIndicatorView、UISwitch、...详细博文说明:https://github.com/pro648/tips/blob/master/iOS数据持久化.md 源码地址:https://github.com/pro648/BasicDemos-iOS

    IOS应用源码之断点续传队列和本地持久化.zip

    iOS提供了多种数据持久化的方式,包括UserDefaults(用户默认设置)、Core Data(面向对象的数据库管理系统)、SQLite(关系型数据库)、文件系统以及云存储等。对于简单的数据,如用户偏好设置,可以使用...

    ios-FMDB持久化存储_Swift.zip

    在iOS应用开发中,数据持久化是至关重要的一个环节,它允许应用程序在用户退出或设备重启后仍能保存和恢复数据。"ios-FMDB持久化存储_Swift.zip" 文件包是一个关于如何使用Swift实现iOS应用数据持久化的教程,特别...

    数据持久化

    在iOS开发中,数据持久化有多种实现方式,包括对象归档、属性列表以及NSUserDefaults。以下是对这些方法的详细解释: 1. **对象归档**:对象归档是苹果的Foundation框架提供的一种用于序列化和反序列化Objective-C...

    iOS对FMDB进行封装实现数据持久化

    在iOS开发中,数据持久化是一项重要的任务,它允许应用程序在用户关闭或设备重启后仍然保存数据。FMDB是一个流行的选择,它是SQLite数据库的一个Objective-C封装库,提供了简单易用的接口来执行SQL语句。本篇文章将...

    ios-数据的持久化.zip

    使用几个小例子分别实现 归档NSKeyedArchiver、NSUserDefaults、plist文件数据存储,简单直观,代码地址https://github.com/fancyLi/data-store。

Global site tag (gtag.js) - Google Analytics