iOS开发——数据持久化OC篇&文件系统总结

文件系统总结

包系统

就是app程序本身,其实是个zip包,资源/可执行文件 都在里面

  • + (NSBundle *)mainBundle 得到程序本身的bundle类. NSBundle提供了很多path相关函数
  • 运行期只读,不可写
  • 没有必要建立子文件夹,苹果不推荐在包中建立子文件夹
  • + (UIImage *)imageNamed:(NSString *)name 可以直接加载包中的图片文件
  • 包中带有的数据不能太多,不然不利于用户安装
  • NSBundle pathForResource:ofType: 使用这个函数查找包存放的文件

Sandbox 系统

每个app安装之后都存放在一个单独的目录当中,这个目录叫做沙盒,目录结构如下

  • Documents
  • Library/Caches
  • Library/Preferences
  • tmp
  • 程序Bundle

Documents 会在用户通过itunes备份的时候被自动备份,其他目录随意用

  • NSHomeDirectory() 得到app的沙盒目录
  • NSTemporaryDirectory() 得到 $(沙盒目录)/tmp
  • NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES) 得到 $(沙盒目录)/Documents (函数返回的是数组)
  • NSSearchPathForDirectoriesInDomains( NSLibraryDirectory, NSUserDomainMask, YES) 得到 $(沙盒目录)/Library

NSString 定义了一堆 关于文件路径的 join,split的函数,路径相关函数主要定义在:NSPathUtilities.h 文件当中

NSUserDefaults 系统

  • NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
  • 文件存放在 $(沙盒目录)/Library/Preferences/{Bundle Identifier}.plist
  • ios提供了一个工厂函数,没有容量限制,最好不要在里面存放业务数据, 这会破坏ios对此的语义设定,这里面应该存放程序设置相关信息

Keychain 系统

  • 专注于存放密码或者证书
  • 数据是加密存储的
  • keychain里保存的信息不会因App被删除而丢失,在用户重新安装App后依然有效

Cache系统

真的是cache,存储会有过期时间

  • NSURLCache,以url为单元,可以存在硬盘上
  • NSCache,只放在内存当中,和NSMutableDictionary区别不大,有意义的是:ios可以在程序运行期自行释放NSCache

文件格式

  • 二进制:NSData
  • plist: 最常见而且简单
  • 对象序列化:NSKeyedArchiver
  • sqlite: 文件数据库,Core Data/libsqlite3/FMDB
  • plain text: 罕见,用Standard C Library操作,fopen/fwrite/fclose
时间: 2024-10-13 02:26:20

iOS开发——数据持久化OC篇&文件系统总结的相关文章

iOS开发——数据持久化OC篇&(三)对象归档

归档 iOS开发UI篇—ios应用数据存储方式(归档)  一.简单说明 在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用,且必须先获取路径相对麻烦: 偏好设置(将所有的东西都保存在同一个文件夹下面,且主要用于存储应用的设置信息) 归档:因为前两者都有一个致命的缺陷,只能存储常用的类型.归档可以实现把自定义的对象存放在文件中. 二.代码示例 1.文件结构 2.代码示例 YYViewController.m文件 1 // 2 // YYViewController.m 3 /

iOS开发——数据持久化OC篇&总结

数据持久化总结 1 //1.沙盒:/Users/nono/Library/Application Support/iPhone Simulator/5.1/Applications/2D135859-1E80-4754-B36D-34A53C521DE3 2 /** 3 // 1.获取程序的Home目录 4 NSString *home = NSHomeDirectory(); 5 NSLog(@"应用程序目录:%@", home); 6 7 // 2.获取Documents目录 8

iOS开发——数据持久化OC篇&(五)SQLite3详解

SQLite3详解 SQLite是嵌入式的和轻量级的SQL数据库.SQLite是由C实现的.广泛用于包括浏览器(支持HTML5的大部分浏览器,IE除外).iOS.Android以及一些便携需求的小型web应用系统. 1 使用原因:存储.检索信息 2 SQLite是MySQL精简版.但无需服务器就能进行. 3 两个限制:1)必须手动创建数据库 2)没有面向对象的接口. 4 如何手动创建数据库. 使用SQLite前的准备 使用SQLite是很多做iOS开发中第一次面对C的情况,包括我.因为SQLit

iOS开发——数据持久化OC篇&(二)属性列表

属性列表 属性列表文件是一种XML文件,Foundation框架中的数组和字典等都可以于属性列表文件相互转换. NSArray类常用读写属性列表文件的方法: +arrayWithContentsOfFile:类级构造方法,用于从属性列表文件中读取数据,创建NSArray对象. -initWithContentsOfFile:实例构造方法,用于从属性列表文件中读取数据,创建NSArray对象. -writeToFile:atomically:该方法把NSArray对象写入到属性列表文件中,第一个参

iOS开发——数据持久化OC篇&(七)CoreData高级常识

CoreData高级常识 关于CoreData貌似实际开发中很少用到,基本上是个有九个公司不会使用它,因为都说是性能不好,但是作为一个程序员,了解及其使用时必须了, 下面是我从一位大神那里搬过来的一下Core详细介绍,相信以后总有一天会帮我解决不少学习CoreData中的问题! 一.技术概览 1. Core Data 功能初窥 对于处理诸如对象生命周期管理.对象图管理等日常任务,Core Data框架提供了广泛且自动化的解决方案.它有以下特性. (注:对象图-Object graph的解释:在面

iOS开发——数据持久化OC篇&(一)沙盒详解

沙盒详解 1.IOS沙盒机制 IOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等. 1.1.每个应用程序都有自己的存储空间 1.2.应用程序不能翻过自己的围墙去访问别的存储空间的内容 1.3.应用程序请求的数据都要通过权限检测,假如不符合条件的话,不会被放行. 通过这张图只能从表层上理解sandbox是一种安全体系,应用程序的所有操作都要通过这个体系来执行,其中核心内容

iOS开发——数据持久化OC篇&(六)CoreData详解

CoreData详解 介绍: 在Cocoa环境下,如果你想使用数据库(如sqlite),你可以使用sql语句的方式通过相关的工具类进行数据库的直接操作.当然你也可以通过别人封装之后的一些简单框架,使得你的操作更加简单(如FMDB BNRPersistence). Cocoa框架本身提供了CoreData这个API可方便的让开发者通过操作对象的方式在操作数据库.CoreData是一个对象图(object graph)以及持久化的管理框架.我们可以通过CoreData创对象,设置好象之间的关系,然后

iOS开发——数据持久化OC篇&(四)偏好设置

偏好设置 一.简单介绍 很多iOS应用都支持偏好设置,比如保存用户名.密码.字体大小等设置,iOS提供了一套标准的解决方案来为应用加入偏好设置功能 每个应用都有个NSUserDefaults实例,通过它来存取偏好设置.比如,保存用户名.字体大小.是否自动登录 存储位置: 存储形式: 二.代码示例 1.storyboard 2.代码 1 // 2 // YYViewController.m 3 // 01-偏好设置 4 // 5 // Created by apple on 14-6-7. 6 /

iOS开发——数据持久化OC篇&plist文件增删改查操作

Plist文件增删查改 主要操作: 1.//获得plist路径    -(NSString*)getPlistPath: 2.//判断沙盒中名为plistname的文件是否存在    -(BOOL) isPlistFileExists: 3.//读取沙盒中Document文件夹下的BookList.plist文件 [NSMutableDictionarydictionaryWithContentsOfFile:plistPath]; 4.//写入文件     if ([plistDictiona