IOS高级编程之二:IOS的数据存储与IO

一、应用程序沙盒

IOS应用程序职能在系统为该应用所分配的文件区域下读写文件,这个文件区域就是应用程序沙盒。所有的非代码文件如:图片、声音、映象等等都存放在此。

在mac中command+shift+G命令,然后输入users/用户名/library命令进入库,然后依次进入application support/iphone simulator/版本/applications文件夹,这里面的各个文件夹对应着各个应用程序。

Documents:除了基于NSUserDefaults的首选项设置外,应用程序的数据、文件都保存在该目录下

Library:基于NSUserDefaults的首选项参数保存在Library/Preferences下

tmp:应用程序存储临时文件,ios同步时itunes不会同步这里面的数据,当应用程序不在需要这些文件时,应当删除以避免占用空间。

获取documents路径:

1 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
2 NSString *dd = [paths objectAtIndex:0];

获取tmp目录:

1 NSString *tempPath = NSTemporaryDirectory();

那么我们在保存数据时使用哪种发式比较好呢,这个当然还要具体情况具体对待。
当保存小数据量的数据时,可以使用NSArray或者NSDictionary,调用writeToFile:atomically:方法写入一个文件,使用时读取文件内容即可。

当保存大数据量的数据时,可以选择使用sqllite,ios提供了CoreData框架。

二、应用程序参数与用户默认设置

1、使用Settings Bundle

Settings Bundle时应用程序中的一组特殊文件,用于保存较简单的各种配置信息。如果使用了Settings Bundle,ios自带的设置应用则会显示你的app

2、使用NSUserDefaults读取、保存应用程序参数

NSUserDefaults是一个单例类,每个应用程序只有一个NSUserDefaults对象,Settings Bundle设置的参数,也可以通过NSUserDefaults来读取和设置

获取NSUserDefaults的方法:

1 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

获取NSUserDefaults对象后,可以获取和设置应用程序参数

xxForKey:(NSString *) key  =>xx表示各种类型,根据key获取值

setBool:(xxx) value forKey:(NSString *) key =>设置参数

设置完参数后,调用synchronize方法进行保存。

3、属性列表

属性列表就是文章开始提到的利用NSArray和NSDictionary将数据写入到文件的保存方法。

但是有一些限制,只有下列类型的值保存到NSArray和NSDictionary中才可以直接调用writeToFile方法执行保存:

NSArray、NSMutableArray、NSDictionary、NSMutableDictionary、NSData、NSMutableData、NSString、NSMutableString、NSValue、NSNumber

如果NSArray和NSDictionary保存了我们自定义的类,那么将不能直接调用writeToFile方法执行保存。(可以考虑使用对象归档的方法进行保存)

 1 //使用属性列表保存3个用户的账号密码
 2     accountList = [[NSMutableArray alloc] init];
 3     [accountList addObject:[NSDictionary
 4                                 dictionaryWithObjects:[NSArray arrayWithObjects:@"loginname",@"loginpwd", nil]
 5                                 forKeys:[NSArray arrayWithObjects:@"305213781",@"123123", nil]]];
 6     [accountList addObject:[NSDictionary
 7                             dictionaryWithObjects:[NSArray arrayWithObjects:@"loginname",@"loginpwd", nil]
 8                             forKeys:[NSArray arrayWithObjects:@"475782389",@"123456", nil]]];
 9     [accountList addObject:[NSDictionary
10                             dictionaryWithObjects:[NSArray arrayWithObjects:@"loginname",@"loginpwd", nil]
11                             forKeys:[NSArray arrayWithObjects:@"330577588",@"123456789", nil]]];
12     [accountList writeToFile:[self filePath] atomically:YES];
13
14     //使用UIActionSheet提示用户保存成功
15     UIActionSheet *sheet =[[UIActionSheet alloc] initWithTitle:@"保存成功" delegate:nil cancelButtonTitle:nil destructiveButtonTitle:@"确定" otherButtonTitles:nil, nil];
16     [sheet showInView:self.view];

4、使用Sqlite3数据库

1)为项目增加libsqlite3.dylib,这是一个原生的C函数库

常用函数:

int sqlite3_close(sqlite3 *):关闭sqlite3 *所代表的数据连接,并释放底层数据库连接资源。在调用该函数之前,必须先调用sqlite3_finalize()函数,调用sqlite3_blob_close()函数关闭所有的blob处理器,否则将会返回SQLITE_BUSY

int sqlite3_exec(sqlite3*,const char *sql, int (*callback)(void*, int ,char**,char**),void *,char **errmsg):用于执行没有返回值的sql语句

sqlite3_int64  sqlite3_last_insert_rowid(sqlite3*):返回sqlite3代表的数据库最后一次插入行的id

int sqlite3_changes(sqlite3*):执行某条dml语句后,返回受影响行数

void sqlite3_interrupt(sqlite3*):中断一个长时间执行的查询语句

int sqlite3_complete(const char *sql):用于判断sql语句是否执行完成

int sqlite3_open(const char * filename,sqlite3 ** ppdb):打开与filename文件的链接,并让ppdb参数引用被打开的数据库连接

const char *sqlite3_sql(sqlite3_stmt *pStmt):用于提取sqlite3_stmt(预编译SQL语句产生的结果)中包装的sql语句

等等。。。太多了不一一列举了

操作sqlite数据库的大致步骤如下:

1、调用sqlite3_open方法打开与数据库的连接

2、执行语句

3、sqlite3_close函数关闭数据库连接

2)使用Core Data框架

Core Data框架是一个纯粹的面向对象的框架,允许开发者以面向对象的方式持久化操作SQLite数据库。core data底层的持久化存储方式可以是Sqlite数据库,也可以是xml,也可以是内存。

Core Data的核心概念是实体,由Core Data管理的模型对象,它必须是NSManagedObject类或者它的子类的实例。

Core Data应用中的核心API有如下几个:

托管对象模型(NSManagedObjectModel):该对象负责管理整个应用的所有实体以及实体之间的关联关系。当开发者使用Xcode的图形界面设计了实体与实体间的关联关系之后,需要使用该对象来加载、管理应用的托管对象模型

持久化存储协调器(NSPersistentStoreCoordinator):负责管理底层的存储文件,例如sqlite数据库等等

托管对象上下文(NSManagedObjectContext):该对象是Core Data的核心,增删改查都需要通过它来进行

时间: 2024-10-12 03:45:52

IOS高级编程之二:IOS的数据存储与IO的相关文章

iOS多线程编程之Grand Central Dispatch(GCD)介绍和使用

介绍: Grand Central Dispatch 简称(GCD)是苹果公司开发的技术.以优化的应用程序支持多核心处理器和其它的对称多处理系统的系统.这建立在任务并行运行的线程池模式的基础上的.它首次公布在Mac OS X 10.6 ,iOS 4及以上也可用. 设计: GCD的工作原理是:让程序平行排队的特定任务.依据可用的处理资源,安排他们在不论什么可用的处理器核心上运行任务. 一个任务能够是一个函数(function)或者是一个block. GCD的底层依旧是用线程实现,只是这样能够让程序

iOS多线程编程之NSThread的使用

目录(?)[-] 简介 iOS有三种多线程编程的技术分别是 三种方式的有缺点介绍 NSThread的使用 NSThread 有两种直接创建方式 参数的意义 PS不显式创建线程的方法 下载图片的例子 新建singeView app 线程间通讯 线程同步 线程的顺序执行 其他同步 1.简介: 1.1 iOS有三种多线程编程的技术,分别是: 1..NSThread 2.Cocoa NSOperation (iOS多线程编程之NSOperation和NSOperationQueue的使用) 3.GCD 

【转载】iOS多线程编程之Grand Central Dispatch(GCD)介绍和使用

[转载]http://blog.csdn.net/totogo2010/article/details/8016129 iOS多线程编程之Grand Central Dispatch(GCD)介绍和使用 分类: iOS开发进阶2012-09-25 16:22 35382人阅读 评论(32) 收藏 举报 目录(?)[+] 介绍: Grand Central Dispatch 简称(GCD)是苹果公司开发的技术,以优化的应用程序支持多核心处理器和其他的对称多处理系统的系统.这建立在任务并行执行的线程

iOS 多线程编程之Grand Central Dispatch(GCD)

介绍: Grand Central Dispatch 简称(GCD)是苹果公司开发的技术,以优化的应用程序支持多核心处理器和其他的对称多处理系统的系统.这建立在任务并行执行的线程池模式的基础上的.它首次发布在Mac OS X 10.6 ,iOS 4及以上也可用. 设计: GCD的工作原理是:让程序平行排队的特定任务,根据可用的处理资源,安排他们在任何可用的处理器核心上执行任务. 一个任务可以是一个函数(function)或者是一个block. GCD的底层依然是用线程实现,不过这样可以让程序员不

IOS 多线程编程之 NSThread 的使用

1.简介: IOS 多线程编程之 NSThread 的使用 1.1 IOS 有三种多线程编程的技术,分别是: 1..NSThread 2.Cocoa NSOperation (IOS 多线程编程之 NSOperation 和 NSOperationQueue 的使用) 3.GCD 全称:Grand Central Dispatch( IOS 多线程编程之 Grand Central Dispatch(GCD)介绍和使用) 这三种编程方式从上到下,抽象度层次是从低到高的,抽象度越高的使用越简单,也

iOS多线程编程之NSOperation和NSOperationQueue的使用(转自容芳志专栏)

转自由http://blog.csdn.net/totogo2010/ 使用 NSOperation的方式有两种, 一种是用定义好的两个子类: NSInvocationOperation 和 NSBlockOperation. 另一种是继承NSOperation 如果你也熟悉Java,NSOperation就和java.lang.Runnable接口很相似.和Java的Runnable一样,NSOperation也是设计用来扩展的,只需继承重写NSOperation的一个方法main.相当与ja

iOS多线程编程之NSOperation和NSOperationQueue的使用

前一篇 <iOS多线程编程之NSThread的使用> 介绍三种多线程编程和NSThread的使用,这篇介绍NSOperation的使用. 使用 NSOperation的方式有两种, 一种是用定义好的两个子类: NSInvocationOperation 和 NSBlockOperation. 另一种是继承NSOperation 如果你也熟悉Java,NSOperation就和java.lang.Runnable接口很相似.和Java的Runnable一样,NSOperation也是设计用来扩展

Hadoop高级编程之为Hadoop实现构建企业级安全解决方案

本章内容提要 ●    理解企业级应用的安全顾虑 ●    理解Hadoop尚未为企业级应用提供的安全机制 ●    考察用于构建企业级安全解决方案的方法 第10章讨论了Hadoop安全性以及Hadoop中用于提供安全控制的机制.当构建企业级安全解决方案(它可能会围绕着与Hadoop数据集交互的许多应用程序和企业级服务)时,保证Hadoop自身的安全仅仅是安全解决方案的一个方面.各种组织努力对数据采用一致的安全机制,而数据是从采用了不同安全策略的异构数据源中提取的.当这些组织从多个源获取数据,接

Python Flask高级编程之RESTFul API前后端分离精讲 (网盘免费分享)

Python Flask高级编程之RESTFul API前后端分离精讲 (免费分享)  点击链接或搜索QQ号直接加群获取其它资料: 链接:https://pan.baidu.com/s/12eKrJKN-MzscalsJKRoL5w 提取码:88hj 免费分享,如若链接失效请加群 其它资源在群里,私聊管理员即可免费领取:群——517432778,点击加群,或扫描二维码 免费课程资料领取目录:  Python Flask构建微信小程序订餐系统 Python分布式爬虫必学框架Scrapy打造搜索引擎