【iOS开发-75】iOS数据存储的三种简单方式:plist、preference以及用NSCoding存储对象

实际开发中,存储数据主要是用SQLite。而在练习中,我们主要用如下三种存储方式。

(1)利用plist存储简单地NSString、NSArray、NSDictionary等。

(2)利用preference存储,和上面的类似,存储的是简单的数据,本质上还是一个plist文件。

(3)利用NSCoding存储对象这些复杂的数据,本质上是一个data文件,需要被存储的类遵守NSCoding协议并实现init和encode方法。

代码如下:

——在ViewController.m中

- (void)viewDidLoad {
    //我们保存的数据主要是存在Documents中,会被iTunes备份
    //tmp中数据可能会被随时清除
    //Library中的Caches保存的时缓存,不会被清除,但也不会被iTunes备份
    //Library中的Preference保存的时偏好设置,会被iTunes备份
    //1、保存到plist文件中
    NSString *homePath=NSHomeDirectory();
    NSString *docPath=[homePath stringByAppendingPathComponent:@"Documents"];
    NSString *filePath=[docPath stringByAppendingPathComponent:@"data2plist.plist"];
    NSArray *[email protected][@"aaa",@10,@"hello"];
    [array writeToFile:filePath atomically:YES];
    //1、读取plist文件
    NSArray *arrayOut=[NSArray arrayWithContentsOfFile:filePath];
    for (int i=0; i<arrayOut.count; i++) {
        NSLog(@"%@",arrayOut[i]);
    }

    //2、保存到preference中,相比plist,就是少了路径,因为这个路径是紫铜自动判断的
    NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
    [defaults setObject:@"hello" forKey:@"1"];
    [defaults setBool:YES forKey:@"yue"];
    [defaults setInteger:10 forKey:@"age"];
    //立即同步(好习惯)
    [defaults synchronize];
    //2、读取数据
    NSString *str1=[defaults objectForKey:@"1"];
    BOOL bool1=[defaults boolForKey:@"yue"];
    int integer1=[defaults integerForKey:@"age"];
    NSLog(@"%@,%d,%i",str1,bool1,integer1);
    //以上需要注意的是,preference数据存放的地方和xcode5的模拟器不同

    //3、用NSCoding保存对象
    WPPerson *p1=[[WPPerson alloc]init];
    [email protected]"andy";
    p1.age=30;
    NSString *filePath2=[docPath stringByAppendingPathComponent:@"data2data.data"];
    [NSKeyedArchiver archiveRootObject:p1 toFile:filePath2];
    //3、读取数据
    WPPerson *p2=[NSKeyedUnarchiver unarchiveObjectWithFile:filePath2];
    NSLog(@"%@,%i",p2.name,p2.age);

    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

——为了第三个例子创建了一个WPPerson类,继承自NSObject的简单地类。

WPPerson.h中:

#import <Foundation/Foundation.h>

@interface WPPerson : NSObject<NSCoding>
@property(nonatomic,copy) NSString *name;
@property(nonatomic,assign) int age;
@end

WPPerson.m中:

#import "WPPerson.h"

@implementation WPPerson

-(void)encodeWithCoder:(NSCoder *)aCoder{
    [aCoder encodeObject:_name forKey:@"name"];
    [aCoder encodeInt:_age forKey:@"age"];
}

-(id)initWithCoder:(NSCoder *)aDecoder{
    if (self=[super init]) {
        _name=[aDecoder decodeObjectForKey:@"name"];
        _age=[aDecoder decodeIntForKey:@"age"];
    }
    return self;
}

@end
时间: 2024-10-11 20:55:43

【iOS开发-75】iOS数据存储的三种简单方式:plist、preference以及用NSCoding存储对象的相关文章

堆栈的三种实现方式

传统的堆栈操作只有 入栈push 和 出栈pop 两种,没有单独的访问栈顶元素的操作,访问栈顶元素的唯一方式就是出栈(pop会把堆栈顶部的值移出堆栈并返回这个值).这样的pop存在副作用. 所以,我们在这里实现提供push.pop.top三种基本操作的堆栈. 实现堆栈这一抽象数据类型(ADT),即要实现:入栈(push).出栈(pop).访问栈顶元素(top)的操作,另外加上两个判断 栈满.栈空与否的函数. 通常,我们可以使用 静态数组.动态数组.动态链表 这三种方式来实现堆栈. 首先,在sta

学习IOS开发UI篇--数据存储

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

iOS开发网络篇—数据缓存

iOS开发网络篇—数据缓存 一.关于同一个URL的多次请求 有时候,对同一个URL请求多次,返回的数据可能都是一样的,比如服务器上的某张图片,无论下载多少次,返回的数据都是一样的. 上面的情况会造成以下问题 (1)用户流量的浪费 (2)程序响应速度不够快 解决上面的问题,一般考虑对数据进行缓存. 二.缓存 为了提高程序的响应速度,可以考虑使用缓存(内存缓存\硬盘缓存) 第一次请求数据时,内存缓存中没有数据,硬盘缓存中没有数据. 缓存数据的过程 当服务器返回数据时,需要做以下步骤 (1)使用服务器

文顶顶 iOS开发UI篇—iOS开发中三种简单的动画设置

iOS开发UI篇—iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView beginAnimations:nil context:nil]; //设置动画时长 [UIView setAnimationDuration:2.0]; self.headImageView.bounds = rect; // commitAnimations,将beginAnimation之后的所

iOS开发UI篇—iOS开发中三种简单的动画设置

iOS开发UI篇—iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView beginAnimations:nil context:nil]; //设置动画时长 [UIView setAnimationDuration:2.0]; self.headImageView.bounds = rect; // commitAnimations,将beginAnimation之后的所

iOS开发——网络篇&amp;数据解析

数据解析 关于iOS开发的中数据解析的方法有两种JSON和XML,这里只做简单的介绍,会使用就可以了. JSON—— 关于JSON的解析经过很多爱好者的分析使用相同自带的还是最好的,不管是从使用的容易度还是性能方面 NSJSONSerialization 1 -(void)start 2 { 3 4 NSString* path = [[NSBundle mainBundle] pathForResource:@"Notes" ofType:@"json"]; 5

iOS开发中三种简单的动画设置

iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView beginAnimations:nil context:nil]; //设置动画时长 [UIView setAnimationDuration:2.0]; self.headImageView.bounds = rect; // commitAnimations,将beginAnimation之后的所有动画提交并生成动

IOS 开发之网络数据下载和JSON解析

简介 在本文中,我将给大家介绍ios中如何运用NSURLConnection从网络上下载数据,以及解析JSON数据格式的数据,还有数据的显示和图片异步下载. 涉及到的知识点: 1.NSURLConnection的异步下载和数据请求方法的封装. 2.认识JSON格式和JSON格式的解析使用 3.数据在模拟器上的显示和图片的异步下载(使用SDWebImage异步显示图片,SDWebImage是一个库) 注意: 在ios开发中,无论是数据还是图片都是使用异步下载方法,不能使用同步. 内容 首先,要完成

学习IOS开发UI篇--UI知识点总结(三) UIScrollView/UIPageControl/NSTimer

UIScrollView:常用属性 @property(nonatomic)   UIEdgeInsets     contentInset;               // default UIEdgeInsetsZero. add additional scroll area around content @property(nonatomic,getter=isPagingEnabled) BOOL   pagingEnabled;     // default NO. if YES,