• ios数据存取


    手机应用之所以能够给我们生活工作带来便利,其中之一便是能够随时切换不同的应用。如,在苹果手机上接听电话的同时,察看重要的信息内容。这些应用采用了数据存取的技术。

    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

  • 相关阅读:
    .net软件xcopy形式集成solr搜索引擎
    .net线程同步的一些知识
    .net 这些年发展 参考资料
    .net人员用Java 之Java EE
    Android Java 框架基础[知识点汇总]
    .net中集合、容器(Collection)的这些事
    基于JVM的动态语言Groovy MetaProgramming 知识集
    WPF Silverlight异同明细【推荐】
    .net框架中计时器(Timer)的这些事
    Windows系统工具推荐 Sysinternals
  • 原文地址:https://www.cnblogs.com/Kenwuqingjian/p/5356251.html
Copyright © 2020-2023  润新知