手机应用之所以能够给我们生活工作带来便利,其中之一便是能够随时切换不同的应用。如,在苹果手机上接听电话的同时,察看重要的信息内容。这些应用采用了数据存取的技术。
iOS平台提供了若干数据存取技术,今天来看看。
1.沙盒机制。这是Apple在iOS平台提供的存取文件的安全机制。直观的看,一个沙盒是iOS给手机应用分配的特殊目录。从官方提供的API来看,手机应用若要在手机本地做写操作(如保存修改等),则只能在此目录下做写操作:如创建文件,修改文件,缓存文件等。
2.Bundle。从NSBundle的api来看,Bundle是一种压缩的只能读取的文件夹,包含各种图片,文本等资源。
3.编程接口:
1。plist文件。这是对应于字典类型NSDictionary结构的XML文件。无论里面有哪些数据类型,读写plist文件的第一步就是将内容缓存到一个NSDictionary中,再通过NSDictionary提供的接口执行读写操作。缺点:只支持特定的系统定义的数据类型;改变其中一项内容,需要读取全部内容。
2。归档/解档。这依赖于NSData/NSMutableData、NSKeyedArchiver/NSKeyedUnArchiver 和 protocol NSCoding的实现。第一步是设计某个需要归档的实体类,使这个类实现protocol NSCoding的方法;第二步,借助NSData/NSMutableData作为缓存,归档时,让NSKeyedArchiver的实例将归档后的数据缓存到NSMutableData,最后写到文件中;解档时,先从文件中读取数据到NSData,然后NSKeyedUnarchiver的实例将NSData设为读取缓存区。若是系统定义的数据类型,即简单对象,直接使用NSKeyedArchiver/NSKeyedUnArchiver就可以,其他两者就不需要显式制定了。若是自定义对象,三者才是必需的。缺点:改变其中一项内容,需要读取全部内容。
3。Sqlite3。这是轻量级的第三方的SQL数据库,只提供面向C的编程接口。需要导入头文件sqlite3.h和库文件libsqlite3.dylib。
使用顺序大致,细节比较繁琐:
1。打开数据库(文件)连接。
2。执行sql。
3。关闭数据库连接。
4。CoreData。会用到以下类
NSManageObjectModel
NSManageObjectContext
NSPersistentStoreCoordinator
NSPredicate
NSEntityDescription
用法:
1。创建core data model。决定存储的文件,在创建NSPersistentStoreCoordinator时,需要指明。
2。创建Core Data Stack.我通常采用懒加载的方式创建。可以参考我附加的源码。
3。实现查询,更新,删除等操作,一般会先定位所要操作的记录,这要用到NSFetchRequest, NSEntityDescription。所有的操作都需要通过NSManagedObjectContext来实现,如下面代码所示。
查询:
|
NSFetchRequest *request = [[NSFetchRequest alloc] init]; NSEntityDescription* record = [NSEntityDescription entityForName:@"VisitorRecord" inManagedObjectContext:helper.managedObjectContext]; |
|
[request setEntity:record]; | ||
NSError *err; | ||
NSMutableArray *result = [[helper.managedObjectContext executeFetchRequest:request error:&err] mutableCopy]; |
增加
VisitorRecord *newRecord = (VisitorRecord*) [NSEntityDescription insertNewObjectForEntityForName:@"VisitorRecord" inManagedObjectContext:helper.managedObjectContext]; |
更新,如以上查询到result后,对结果中的记录行进行相应的处理。
for (VisitorRecord *item in result) { |
item.record_text = atext; |
item.modified_time = [NSDate date]; |
} |
if([helper.managedObjectContext save:&err]){ |
NSLog(@"Records was updated successfully."); |
} else { |
NSLog(@"Error %@,%@", err, [err userInfo]); |
} |
删除,通过以上查询的方式定位record,并发送deleteObject给NSManagedObjectContext.
[helper.managedObjectContext deleteObject:record];
4。操作完成后,要保存,才能将改动应用到数据库。
[helper.managedObjectContext save:&err]
5。NSData/NSMutableData,主要可以用作内存与文件之间的缓冲区。
写: [data writeToURL:[self archivePath] atomically:YES];
读: NSMutableData *data = [[NSMutableData alloc] initWithContentsOfURL:[self archivePath]]
以上是iOS平台一些存取数据技术的总结。相应的源码可以到我的github仓库查看:https://github.com/wuqingjian2015/DataStoreHelper.git