一.ios应用常用的数据存储方式 
  1.plist(XML属性列表归档) 
  2.偏好设置 
  3.NSKeydeArchiver归档(存储自定义对象) 
  4.SQLite3(数据库,关系型数据库,不能直接存储对象,要编写一些数据库的语句,将对象拆分存储) 
  5.Core Data(对象型的数据库,把内部环节屏蔽)

应用沙盒 
每个ios应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其它文件系统隔离。应用必须待在自己到沙盒里,其他应用不能访问该沙盒(提示:在ios8中已经开发访问)。 
应用沙盒的文件系统目录,如下图所示(假设应用的名称叫Layer)

模拟器应用用沙盒的根路径在: (apple是用用户名,模拟器版本9.4.1)

/Users/apple/Library/Developer/CoreSimulator/Devices/CCBBF90E-03CE-4B92-827F-345635A6CD7E/data/Containers/Data/Application/30EF0702-4062-40F9-B82C-974679878206

应用沙盒结构分析  应用程序包:(上图中的Layer)包含了所有的资源文件和可执行文件。 
1) Documents:保存应用运行时生成的需要持久性的数据,iTunes同步设备时会备份该目录。例如,游戏应用可将游戏存档保存在该目录。 
2) tmp:保存应用运行时所需的临时数据,使用完毕后再将相应的文件从该目录删除。应用没有运行时,系统也可能会清除该目录下的文件。iTunes同步设备时不会备份该目录 
3) Library 目录:这个目录下有两个子目录:Caches 和 Preferences
  Library/Caches:保存应用运行时生成的需要持久化的数据,iTunes同步设备时不会备份该目录。一般存储体积大,不需要备份的非重要数据。 
  Library/Preference:保存应用的所有偏好设置,iOS的Settings(设置)应用会在该目录中查找应用的设置信息。iTunes同步设备时会备份该目录。

4) AppNameApp 目录:这是应用程序的程序包目录,包含应用程序的本身。由于应用程序必须经过签名,所以您在运行时不能对这个目录中的内容进行修改,否则可能会使应用程序无法启动。

四.应用沙盒常见的获取方式 
  1.沙盒根目录:NSString *home = NSHomeDirectory();  Documents目录两种方法

NSString *homeDir = NSHomeDirectory();

  2.利用沙盒根目录拼接”Documents”字符串

NSString *home = NSHomeDirectory();
NSString *documents = [home stringByAppendingPathComponent:@”Documents”];//不建议采用,因为新版本的操作系统可能会修改目录名

  3.利用 NSSearchPathForDirectoriesInDomains 函数

//NSUserDomainMask代表从用户文件下找
//YES代表展开路径中的波浪字符”~”
NSArray *array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);//在iOS中,只有一个目录跟传入的参数匹配,所以这个集合里面只有一个元素
NSString *documents = [array objectAtIndex:];

  4. 获取 tmp 目录 

NSString *tmp = NSTemporaryDirectory(); 

  5.Library/Caches:(跟Documents类似的2种方法)

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachesDir = [paths objectAtIndex:];

  6.利用沙盒根目录拼接”Caches”字符串

  7.利用 NSSearchPathForDirectoriesInDomain 函数(将函数的2个参数改为:NSCachesDirectory即可)

  8.Library/Preference:通过 NSUserDefaults 类存取该目录下的设置信息

  9.获取应用程序程序包中资源文件路径的方法: 例如获取程序包中一个图片资源(apple.png)路径的方法:

NSString *imagePath = [[NSBundle mainBundle] pathForResource:@”apple” ofType:@”png”];
UIImage *appleImage = [[UIImage alloc] initWithContentsOfFile:imagePath];

  代码中的mainBundle类方法用于返回一个代表应用程序包的对象。

代码:

#define CURRENT_SCREEN_WIDTH     [UIScreen mainScreen].bounds.size.width
#define CURRENT_SCREEN_HEIGHT ([UIScreen mainScreen].bounds.size.height - 64)
#define BUTTON_WIDTH 80
#define BUTTON_HEIGHT 40 @interface ViewController () //保存数据按钮
@property(nonatomic,strong) UIButton *saveButton;
//读取数据按钮
@property(nonatomic,strong) UIButton *readButton; @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
[self initControl];
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} //初始化控件
- (void)initControl{
_saveButton = [[UIButton alloc] initWithFrame:CGRectMake(CURRENT_SCREEN_WIDTH/ - BUTTON_WIDTH/,
CURRENT_SCREEN_HEIGHT/ - BUTTON_HEIGHT,
BUTTON_WIDTH,
BUTTON_HEIGHT)];
[_saveButton setTitle:@"保存数据" forState:UIControlStateNormal];
[_saveButton setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
[_saveButton addTarget:self
action:@selector(saveClick)
forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:_saveButton]; _readButton = [[UIButton alloc] initWithFrame:CGRectMake(CURRENT_SCREEN_WIDTH/ - BUTTON_WIDTH/,
_saveButton.frame.origin.y + _saveButton.frame.size.height + ,
BUTTON_WIDTH,
BUTTON_HEIGHT)];
[_readButton setTitle:@"读取数据" forState:UIControlStateNormal];
[_readButton setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
[_readButton addTarget:self
action:@selector(readClick)
forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:_readButton]; } - (void)saveClick{
//获取应用程序目录
NSString *home = NSHomeDirectory();
NSLog(@"应用程序目录:%@",home); //NSUserDomainMask在用户目录下查找
//YES 代表用户目录的~
//NSDocumentDirectory查找Documents文件夹
//建议使用如下方法动态获取
NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask,
YES) lastObject];
NSLog(@"Documents文件夹路径:%@",doc); //拼接文件路径
NSString *path = [doc stringByAppendingString:@"/abc.plist"]; //NSArray *array = @[@"ios",@"23"];
//[array writeToFile:path atomically:YES]; //NSDictionary *dict = @{@"name":@"ios",@"age":@"28"};
//[dict writeToFile:path atomically:YES]; /*
plist只能存储系统自带的一些常规的类,也就是有writeToFile方法的对象才可以使用plist保持数据
字符串/字典/数据/NSNumber/NSData ...
*/ //自定义的对象不能保存到plist中
DBPerson *person = [[DBPerson alloc] init];
person.name = @"ios";
} - (void)readClick{
NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask,
YES) lastObject];
NSString *path = [doc stringByAppendingString:@"/abc.plist"];
//读取数据
//NSArray *array = [NSArray arrayWithContentsOfFile:path];
//NSLog(@"%@",array); //NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path];
//NSLog(@"name = %@",[dict objectForKey:@"name"]);
//NSLog(@"age = %@",[dict objectForKey:@"age"]);
} @end

五.属性列表 
  1.属性列表是一种XML格式的文件,拓展名为plist。 
  2.如果对象是NSString,NSDictionary,NSArray,NSData,NSNumber等类型,就可以使用writeToFile:atomically:方法直接将对象写到属性列表文件中

ios应用数据存储方式(XML属性列表-plist) - 转的更多相关文章

  1. iOS开发之数据存储之XML属性列表(plist)归档

    1.概述 “归档”意思是持久化存储数据.plist文件是一种XML格式的文件,拓展名为plist.如果对象是NSString.NSDictionary.NSArray.NSData.NSNumber等 ...

  2. iOS 应用数据存储方式(XML属性列表-plist)

    iOS 应用数据存储方式(XML属性列表-plist) 一.ios应用常用的数据存储方式 1.plist(XML属性列表归档) 2.偏好设置 3.NSKeydeArchiver归档(存储自定义对象) ...

  3. iOS开发UI篇—ios应用数据存储方式(XML属性列表-plist)

    iOS开发UI篇—ios应用数据存储方式(XML属性列表-plist) 一.ios应用常用的数据存储方式 1.plist(XML属性列表归档) 2.偏好设置 3.NSKeydeArchiver归档(存 ...

  4. iOS开发UI篇—ios应用数据存储方式(归档)

    iOS开发UI篇—ios应用数据存储方式(归档)  一.简单说明 在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用,且必须先获取路径相对麻烦: 偏好设置(将所有的东西都保存在同 ...

  5. iOS开发UI篇—ios应用数据存储方式(归档) :转发

    本文转发至:文顶顶http://www.cnblogs.com/wendingding/p/3775293.html iOS开发UI篇—ios应用数据存储方式(归档)  一.简单说明 在使用plist ...

  6. iOS开发UI篇—ios应用数据存储方式(偏好设置)

    iOS开发UI篇—ios应用数据存储方式(偏好设置) 一.简单介绍 很多iOS应用都支持偏好设置,比如保存用户名.密码.字体大小等设置,iOS提供了一套标准的解决方案来为应用加入偏好设置功能 每个应用 ...

  7. iOS学习之应用数据存储1-属性列表、偏好设置、NSKeyedArchiver归档

    iOS应用数据存储的常用方式(持久化方式) 属性列表(plist)归档(XML文件) Preference(偏好设置) NSKeyedArchiver归档(NSCoding) SQLite3 Core ...

  8. ios应用数据存储方式

    一.ios应用常用的数据存储方式 1.plist(XML属性列表归档) 2.偏好设置 3.NSKeydeArchiver归档(存储自定义对象) 4.SQLite3(数据库,关系型数据库,不能直接存储对 ...

  9. iOS应用 数据存储方式 (一)

    沙盒是每个应用程序的空间,每个应用程序只能访问自己的文件夹,不可以跨越,访问别的程序的文件夹,这个文件夹就是该应用程序的沙盒. 沙盒中包括以下几个文件夹: 1.应用程序包:(Layer)包含了所有资源 ...

随机推荐

  1. ComboBox Style

    <SolidColorBrush x:Key="ComboBoxNormalBorderBrush" Color="#e3e9ef" /> < ...

  2. Flutter学习之制作底部菜单导航

    简介 现在我们的 APP 上面都会在屏幕下方有一排的按钮,点击不同的按钮可以进入不同的界面.就是说在界面的底部会有一排的按钮导航.可看下面的图示. 完成图示 程序工程目录 梳理下实现步骤我们需要实现这 ...

  3. Android Apk增量更新

    前言 有关APK更新的技术比较多,例如:增量更新.插件式开发.热修复.RN.静默安装. 下面简单介绍一下: 什么是增量更新?   增量更新就是原有app的基础上只更新发生变化的地方,其余保持原样. 与 ...

  4. linux 用户管理修改用户信息、密码状态、删除用户、退出登陆、切换用户

    修改用户信息usermoduseradd支持的选项usermod都支持passwd有两个选项-l(在密码串前面加了两个叹号),-u,usermod有两个选项:-L 临时锁定用户(Lock)(在密码串前 ...

  5. oracle 用户创建、修改、删除

    创建用户: create user test identified by test; 修改密码: 1.alter user test identified by mima; 2.passw[ord]  ...

  6. USTCCourseCommunity 项目介绍

    我们的项目名为USTCCourseCommunity,科大课程社区,主要提供课表管理.课程资源管理.课程信息管理.智能排课.轻松评课等方面的服务,旨在为科大师生提供便捷. 科大现有课程服务形式存在的问 ...

  7. leetCode Detect Capital

    1.问题描述 Given a word, you need to judge whether the usage of capitals in it is right or not. We defin ...

  8. beautifulsoup之CSS选择器

    BeautifulSoup支持大部分的CSS选择器,其语法为:向tag或soup对象的.select()方法中传入字符串参数,选择的结果以列表形式返回. tag.select("string ...

  9. [控件] LineAnimationView

    LineAnimationView 效果 说明 水平循环无间隔播放动画效果,用于loading的界面 源码 https://github.com/YouXianMing/UI-Component-Co ...

  10. PHP_CodeSniffer 使用攻略

    安装 PHP_CodeSniffer 安装 phpcs phpcs 是 PHP 代码规范的检测工具. # 下载 $ curl -OL https://squizlabs.github.io/PHP_C ...