ios开发----应用数据存储的常用方法之plist存取方法

  [注意]转载时请注明出处博客园-吃唐僧肉的小悟空http://www.cnblogs.com/hukezhu/

  ios应用数据存储的常用方式主要有:

  • XML属性列表(plist)归档
  • Preference(偏好设置)
  • NSKeyedArchiver归档(NSCoding)
  • SQLite3
  • Core Data

  

ios应用沙盒机制

  介绍这些方法之前,首先介绍一下应用沙盒的概念.

  ios应用沙盒机制就是指ios应用程序只能在为该程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等。(ios8之前是这个样子,iOS8新开放了一种对几个固定系统区域的扩展机制extension,它可以在一定程度上弥补iOS的沙盒机制对应用间通信的限制).

  应用沙盒机制下,每个应用程序都有自己的存储空间 ;应用程序不能翻过自己的围墙去访问别的存储空间的内容 ;应用程序请求的数据都要通过权限检测,假如不符合条件的话,不会被放行。

  应用沙盒的结构主要如下:

  Documents:保存应用运行时生成的需要持久化的数据,iTunes同步设备时会备份该目录。例如,游戏应用可将游戏存档保存在该目录

  

  tmp:保存应用运行时所需的临时数据,使用完毕后再将相应的文件从该目录删除。应用没有运行时,系统也可能会清除该目录下的文件。iTunes同步设备时不会备份该目录

  Library/Caches:保存应用运行时生成的需要持久化的数据,iTunes同步设备时不会备份该目录。一般存储体积大、不需要备份的非重要数据

  Library/Preference:保存应用的所有偏好设置,iOS的Settings(设置)应用会在该目录中查找应用的设置信息。iTunes同步设备时会备份该目录

ios应用沙盒目录常见获取方式

  在介绍plist文件存取方式之前,还有一个问题需要提前介绍,一会也需要用到,就是我们怎么获取用于沙盒的目录,也有多种方式,

  获取应用沙盒根目录的方法:

   

//获取应用沙盒的根目录
NSString *home = NSHomeDirectory();
//NSHomeDirectory()是一个c语言的方法

  获取Documents文件路径的方法:

    • 第一种方法:

      • 首先,获取应用沙盒的根目录,再利用字符串的拼接函数,得到Documents目录 (但是不建议采用这个方法,因为新版本的操作系统可能会修改目录名)
1     //第一种方法:
2     //获取当前应用沙盒的根目录
3     NSString *homePath = NSHomeDirectory();
4     //拼接路径
5     NSString *docPath = [homePath stringByAppendingPathComponent:@"Documents"];  
    • 第二种方法

      • 利用NSSearchPathForDirectoriesInDomains函数获得Documents目录
 //第二种方法
    NSString *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];

    这个NSSearchPathForDirectoriesInDomains函数一共有三个参数(注意返回的是一个数组),第一个参数是代表获取什么文件的路径(枚举选择就可),系统已经帮我们封装好.第二个参数代表从用户文件夹下找,第三个参数代表查找时文件是否展开,这个参数一般就填为yes,否则的话可能找不到路径,通过no,获取的路径,系统会将前面的路径换为一个~,如下图:

    

  正常情况下,为YES的情况输出如下图:

  

  所以此处注意:这个NSSearchPathForDirectoriesInDomains函数的第三个参数一般都要写为YES.注意这个函数返回的是一个数组,但是在ios系统中的沙盒只有这样的一个文件夹,所以取数组的第0个元素即可.

    在mac系统中,有一个能自动找到应用沙盒的根目录的软件simpholder2.app,在测试使用是非常方便,可以下载使用.(需要的话请联系[email protected])

  获取应用沙盒tmp目录的方法:

  

//获取应用沙盒tmp目录
NSString *tmp = NSTemporaryDirectory();
 

  

  

   获取应用沙盒caches目录的方法:

1 //获取应用沙盒tmp目录
2
3 NSString *cachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
4
5
6 //当然也可以使用最开始上面介绍的字符串拼接方法获得,此处不再赘述

   获取应用沙盒preference目录的方法:

     通过NSUserDefaults类存取该目录下的设置信息

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

plist文件存取方式

  属性列表是一种XML格式的文件,拓展名为plist

  如果对象是NSString、NSDictionary、NSArray、NSData、NSNumber等类型,就可以使用writeToFile:atomically:方法直接将对象写到属性列表文件中

  我通过一个小的demo来测试这个plist文件 的存取过程.

  在storyboard中拖入两个按钮,分别拖线,执行保存和读取的方法:

  

  存储操作:

  

 1 - (IBAction)save {
 2
 3     //获取应用沙盒的根目录有两种方法
 4 //    //第一种方法:
 5 //    //获取当前应用沙盒的根目录
 6 //    NSString *homePath = NSHomeDirectory();
 7 //    //拼接路径
 8 //    NSString *docPath = [homePath stringByAppendingPathComponent:@"Documents"];
 9 //
10 //    //还要指定存储文件的文件名称,仍然使用字符串拼接
11 //    NSString *filePath = [docPath stringByAppendingPathComponent:@"test.plist"];
12 //    //NSLog(@"%@",filePath);
13
14     //第二种方法
15     NSString *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
16         //还要指定存储文件的文件名称,仍然使用字符串拼接
17     NSString *filePath = [docPath stringByAppendingPathComponent:@"test.plist"];
18     NSLog(@"%@",filePath);
19     //新建一个数组(作为例子)
20     NSArray *array = @[@"abc",@123,@"a-d-g"];
21
22     //将数组存储到文件中
23     [array writeToFile:filePath atomically:YES];
24
25
26
27
28 }

  读取操作:

  

 1 - (IBAction)read {
 2
 3     //获取Documents目录
 4     NSString *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
 5     //还要指定存储文件的文件名称,仍然使用字符串拼接
 6     NSString *filePath = [docPath stringByAppendingPathComponent:@"test.plist"];
 7
 8
 9     //使用一个数组来接受数据
10     NSArray *array = [NSArray arrayWithContentsOfFile:filePath];
11     NSLog(@"%@",array);
12
13 }

  我这里是使用NSArray来进行测试存取的,也可以使用字典.但是有一点需要注意,就是存取字符串的时候,最好不要使用plist文件,因为plist本身不支持字符串(这个可以通过新建一个plist文件,打开之后,发现其根节点处,只有数组和字典两个选项),而且字符串的存取方法也已经过期.

  此处再顺便 介绍一下上面提到的能自动找到应用沙盒的根目录的软件simpholder2.app软件,安装打开之后,

点击之后就会自动打开当前应用的沙盒,非常方便测试使用.

  

  最后附上程序的源代码:

ViewController:

  

 1 //
 2 //  ViewController.m
 3 //  02-plist文件存取
 4 //
 5 //  Created by hukezhu on 15/6/5.
 6 //  Copyright (c) 2015年 hukezhu. All rights reserved.
 7 //
 8
 9 #import "ViewController.h"
10
11 @interface ViewController ()
12 - (IBAction)save;
13
14 - (IBAction)read;
15 @end
16
17 @implementation ViewController
18
19 - (void)viewDidLoad {
20     [super viewDidLoad];
21     // Do any additional setup after loading the view, typically from a nib.
22 }
23
24 - (void)didReceiveMemoryWarning {
25     [super didReceiveMemoryWarning];
26     // Dispose of any resources that can be recreated.
27 }
28
29 //获取应用沙盒的根目录有两种方法
30 //第一种方法:
31
32
33
34 - (IBAction)save {
35
36     //获取应用沙盒的根目录有两种方法
37 //    //第一种方法:
38 //    //获取当前应用沙盒的根目录
39 //    NSString *homePath = NSHomeDirectory();
40 //    //拼接路径
41 //    NSString *docPath = [homePath stringByAppendingPathComponent:@"Documents"];
42 //
43 //    //还要指定存储文件的文件名称,仍然使用字符串拼接
44 //    NSString *filePath = [docPath stringByAppendingPathComponent:@"test.plist"];
45 //    //NSLog(@"%@",filePath);
46
47     //第二种方法
48     NSString *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
49         //还要指定存储文件的文件名称,仍然使用字符串拼接
50     NSString *filePath = [docPath stringByAppendingPathComponent:@"test.plist"];
51     NSLog(@"%@",filePath);
52     //新建一个数组(作为例子)
53     NSArray *array = @[@"abc",@123,@"a-d-g"];
54
55     //将数组存储到文件中
56     [array writeToFile:filePath atomically:YES];
57
58
59
60
61 }
62
63 - (IBAction)read {
64
65     //获取Documents目录
66     NSString *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
67     //还要指定存储文件的文件名称,仍然使用字符串拼接
68     NSString *filePath = [docPath stringByAppendingPathComponent:@"test.plist"];
69
70
71     //使用一个数组来接受数据
72     NSArray *array = [NSArray arrayWithContentsOfFile:filePath];
73     NSLog(@"%@",array);
74
75 }
76 @end

VIewController

  

  本篇文章只是说了一个plist文件的存取,剩下的文件存取方式,之后再介绍.  

  根据学习,整机整理相关知识点,如有错误不当之处,请批评指正,谢谢.

时间: 2024-12-22 13:33:08

ios开发----应用数据存储的常用方法之plist存取方法的相关文章

李洪强iOS开发之数据存储

李洪强iOS开发之数据存储 iOS应用数据存储的常用方式 1.lXML属性列表(plist)归档 2.lPreference(偏好设置) 3.lNSKeyedArchiver归档(NSCoding) 4.lSQLite3 5.lCore Data Documents: 保存应用运行时生成的需要持久化的数据,iTunes同步设备时会备份该目录.例如,游戏应用可将游戏存档保存在该目录 tmp: 保存应用运行时所需的临时数据,使用完毕后再将相应的文件从该目录删除.应用没有运行时,系统也可能会清除该目录

ios开发之数据存储

iOS应用数据存储的常用方式 XML属性列表(plist)归档 Preference(偏好设置) NSKeyedArchiver归档(NSCoding) SQLite3 Core Data 应用沙盒 每个iOS应用都有自己的应用沙盒(应用沙盒就是应用的文件夹),与其他文件系统隔离.应用必须待在自己的沙盒里,其他应用不能访问该沙盒 应用沙盒的文件系统目录,如下图所示(假设应用的名称叫Layer) 模拟器应用沙盒的根路径在: (apple是用户名, 6.0是模拟器版本)/Users/apple/Li

iOS开发之数据存储之SQLite3(包括FMDB)

1.概述 SQLite3是一款开源的嵌入式关系型数据库,可移植性好.易使用.内存开销小. SQLite3是无类型的,意味着你可以保存任何类型的数据到任意表的任意字段中.比如下列的创表语句是合法的: create table t_person(name, age); 为了保证可读性,建议还是把字段类型加上: create table t_person(name text, age integer); SQLite将数据划分为以下几种存储类型: integer : 整型值 real : 浮点值 te

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

1.概述 “归档”意思是持久化存储数据.plist文件是一种XML格式的文件,拓展名为plist.如果对象是NSString.NSDictionary.NSArray.NSData.NSNumber等类型,就可以使用writeToFile:atomically:方法直接将对象写到属性列表文件(plist文件)中.特别注意的是plist文件不能存储对象. IOS常用文件存储方式有: XML属性列表(plist)归档 Preference(偏好设置) NSKeyedArchiver归档(NSCodi

iOS开发:数据存储之plist文件操作

1.plist,全名PropertyList,即属性列表文件,它是一种用来存储串行化后的对象的文件.这种文件,在ios开发过程中经常被用到.这种属性列表文件的扩展名为.plist,因此通常被叫做plist文件.文件是xml格式的.Plist文件是以key-value的形式来存储数据.既可以用来存储用户设置,也可以用来存储一些需要经常用到而不经常改动的信息. 在对plist文件的操作有创建,删除,写入和读取.这四种操作中,写入和读取是比较常用的操作. 2.下面我对这四种操作进行一一的陈述. 首先,

iOS开发_数据存储方式

对于数据持久化的问题,博主并不准备在博文内放很多的代码进行更深一步解释,只是简单的介绍一下四种数据持久化,如有时间,会另外针对各个数据持久化的方法进行更进一步的阐述. 直接进入主题: 〈1.NSUserDefault 用来存储配置信息,开发者可以通过这个实例对象,对这些已有信息进行修改,也可以根据自己的需求创建新的配置项.这是一个系统的单例,是一个轻量级存储机制,一般用来存储用户的登录状态,一般不会用来存储复杂对象. 〈2.SQLite 用于查询需求较多的数据,擅长处理的数据类型其实与NSUse

iOS开发之数据存储之NSData

1.概述 使用archiveRootObject:toFile:方法可以将一个对象直接写入到一个文件中,但有时候可能想将多个对象写入到同一个文件中,那么就要使用NSData来进行归档对象. NSData可以为一些数据提供临时存储空间,以便随后写入文件,或者存放从磁盘读取的文件内容.可以使用[NSMutableData data]创建可变数据空间. 2.归档2个Person对象到同一文件中 归档(编码): // 新建一块可变数据区 NSMutableData *data = [NSMutableD

iOS开发之数据存储之Preference(偏好设置)

1.概述 很多iOS应用都支持偏好设置,比如保存用户名.密码.字体大小等设置,iOS提供了一套标准的解决方案来为应用加入偏好设置功能. 每个应用都有个NSUserDefaults实例,通过它来存取偏好设置.比如,保存用户名.字体大小.是否自动登录. NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults  setObject:@"itcast"  forKey:@"username

iOS开发系列--数据存取

概览 在iOS开发中数据存储的方式可以归纳为两类:一类是存储为文件,另一类是存储到数据库.例如前面IOS开发系列—Objective-C之Foundation框架的文章中提到归档.plist文件存储,包括偏好设置其本质都是存储为文件,只是说归档或者plist文件存储可以选择保存到沙盒中,而偏好设置系统已经规定只能保存到沙盒的Library/Preferences目录.当然,文件存储并不作为本文的重点内容.本文重点还是说数据库存储,做过数据库开发的朋友应该知道,可以通过SQL直接访问数据库,也可以