三种iOS应用程序用户数据存储方法

本文通过偏好设置,plist文件,归档解档三种方法来演示iOS应用程序用户数据存储机制。

首先,我们创建一个Person类,并定义三个成员属性,用来存储数据

@property (nonatomic,copy) NSString *name;

@property (nonatomic,assign)NSInteger age;

@property (nonatomic,assign)BOOL isTrue;

一、通过偏好设置

1.通过偏好设置存储数据

//获取偏好设置的对象
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
 // 告诉系统 你想存入什么东西
    [defaults setObject:@"小明" forKey:@"name"];
    [defaults setInteger:100 forKey:@"age"];
    [defaults setBool:YES forKey:@"isTrue"];
 // 数据同步 (强制写入)
    [defaults synchronize];

2.通过偏好设置读取数据

//获取NSUserDefaults对象,是单例
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
 // 获取数据
    NSString *name = [defaults objectForKey:@"name"];
    NSInteger age = [defaults integerForKey:@"age"];
    BOOL isTrue = [defaults boolForKey:@"isTrue"];
   //验证
    NSLog(@"%@ 有 %@ 岁了吗 ? %d",name,@(age),isTrue);

二、通过plist文件

1.通过plist文件写入数据

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

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

//提前定义一个宏,用来获取路径
#define PATH  [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]  stringByAppendingPathComponent:@"data.txt"]

//添加存储的内容
NSArray *arry  = @[@"李四",@"老王",@"小明"];

 //存入本地(atomically 线程保护)
 [arry writeToFile:PATH atomically:YES];

NSLog(@"%@",PATH);

2.通过plist文件读取数据

// 通过Plist 文件 读取数据

    NSArray *array = [NSArray arrayWithContentsOfFile:PATH];

    for(NSString *str in array)
       {
        NSLog(@"%@",str);
        }

三、通过归档和解档

1.通过归档文件写入数据

归档的实质其实就是将一个NSDictionary对象归档到一个plist属性列表中。

如果使用归档文件,必须为Person类引入NSCoding协议,并实现encodeWithCoder:和initWithCoder:方法。

说明:

encodeWithCoder:

每次归档对象时,都会调用这个方法。

一般在这个方法里面指定如何归档对象中的每个实例变量,可以使用encodeObject:forKey:方法归档实例变量。

initWithCoder:

每次从文件中恢复(解码)对象时,都会调用这个方法。

一般在这个方法里面指定如何解码文件中的数据为对象的实例变量,可以使用decodeObject:forKey方法解码实例变量。

//Person类的实现文件
//归档 只是一个过程 , 此方法 是告诉系统你想存储 对象的哪些属性
- (void)encodeWithCoder:(NSCoder *)aCoder
{
    [aCoder encodeObject:self.name forKey:@"name"];
    [aCoder encodeInteger:self.age forKey:@"age"];
    [aCoder encodeBool:self.isTrue forKey:@"isTrue"];
}

//反归档 只是一个过程 , 此方法 是告诉系统你想获取 对象的哪些属性
- (instancetype)initWithCoder:(NSCoder *)aDecoder
{

    if (self = [super init]) {

        self.name = [aDecoder decodeObjectForKey:@"name"];
        self.age = [aDecoder decodeIntegerForKey:@"age"];
        self.isTrue = [aDecoder decodeBoolForKey:@"isTrue"];

    }
    return self;
}

2.使用归档方法写入数据

//写入数据
    Person *p = [[Person alloc]init];
    p.name = @"小王";
    p.age = 18;
    p.isTrue = NO;
//存储 归档存储的前提 是 当前这个对象 必须遵守NSCoding 协议
    [NSKeyedArchiver archiveRootObject:p toFile:PATH];

3.通过反归档(解档)读取数据

Person *p = [NSKeyedUnarchiver unarchiveObjectWithFile:PATH];

 NSLog(@"%@ , %@ , %d",p.name,@(p.age),p.isTrue);
时间: 2024-10-15 15:19:54

三种iOS应用程序用户数据存储方法的相关文章

session的官方定义是:Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。 说白了session就是一种可以维持服务器端的数据存储技术。session主要有以下的这些特点: 1. session保存的位置是在服务器端 2. session一般来说是要配合cookie使用,如果是浏览器禁用了cookie功

session的官方定义是:Session:在计算机中,尤其是在网络应用中,称为"会话控制".Session 对象存储特定用户会话所需的属性及配置信息. 说白了session就是一种可以维持服务器端的数据存储技术.session主要有以下的这些特点: 1. session保存的位置是在服务器端 2. session一般来说是要配合cookie使用,如果是浏览器禁用了cookie功能,也就只能够使用URL重写来实现session存储的功能 3. 单纯的使用session来维持用户状态的话

IOS NSUserDefaults-轻量级本地数据存储

IOS NSUserDefaults-轻量级本地数据存储 IOS 针对用户数据持久化处理提供了多种处理方式:NSUserDefaults.plist 以及 sqlite3 数据库 都是很不错的选择! NSUserDefaults 是一种轻量级本地数据存储,操作方便,但仅支持Bool.Float.NSInteger.Object.Double.Url 这六种数据类型的存储 NSUserDefaults 提供了添加.读取以及移除等方法,供开发者调用,具体示例如下: GNSUserDefaults.h

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

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

单片机中C语言的程序与数据存储

单片机中C语言的程序与数据存储 一.五大内存分区: 内存分成5个区,它们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区. 1.栈区(stack):FIFO就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区.里面的变量通常是局部变量.函数参数等. 2.堆区(heap):就是那些由new分配的内存块,它们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete.如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收. 3.自由存储区:就是那些

exp/imp三种模式——完全、用户、表

exp/imp三种模式——完全.用户.表    原文地址http://www.2cto.com/database/201305/214019.html ORACLE数据库有两类备份方法.第一类为物理备份,该方法实现数据库的完整恢复,但数据库必须运行在归挡模式下(业务数据库在非归挡模式下运行),且需要极大的外部存储设备,例如磁带库:第二类备份方式为逻辑备份,业务数据库采用此种方式,此方法不需要数据库运行在归挡模式下,不但备份简单,而且可以不需要外部存储设备. 数据库逻辑备份方法 ORACLE数据库

java中内部类的创建四种情况,三种方式,及内部数据访问权限

内部类和外部类的关系,及内部静态类的数据访问权限,声明方式. 第一种,在外部类内部声明使用内部类,内部类的类型为static和非 static类型,内部类数据类型为private,protected,public 类型的访问权限.外部类为非静态声明和权限如下: package com; public class Test1 { //@author 张春蕾 private class Name{ private int i =1; public int s = 2; protected int m

华为网盘停止用户数据存储

5月3日消息,继金山快盘.新浪微盘等多家网盘停止存储服务后,华为网盘今日也宣布停止用户数据存储分享服务. 华为网盘发布公告称,为配合国家有关部门积极开展网盘涉黄.涉盗版内容的清查工作,即日起停止用户数据存储分享服务,所有用户数据将保留到2016年6月30日止.2016年7月1日起,DBank华为网盘免费永久空间资格将被终止,付费服务将根据套餐剩余时间进行退款,必于2017年1月1日之前通过客服渠道进行申请,2017年1月1日起,DBank华为网盘将全面停止客服咨询.退费等工作. 不过华为方面表示

CR开发笔记-6用户数据存储

仍然是贴代码 using UnityEngine; using System.Collections; public class DateControl : MonoBehaviour { public static string Name; public static int Num; bool JBstart; float fullWidth; float fullHeight; Rect fullScreen; //窗口 Rect NameText; Rect GoBtn; Rect po

[Java][activiti]同步或者重构activiti identify用户数据的方法

同步或者重构Activiti Identify用户数据的多种方案比较 相信每个涉及到用户的系统都有一套用户权限管理平台或者模块,用来维护用户以及在系统内的功能.数据权限,我们使用的Activiti工作流引擎配套设计了包括User.Group的Identify模块,怎么和业务数据同步呢,这个问题是每个新人必问的问题之一,下面介绍几种同步方案,最后总结比较. 如果你在考虑直接使用Activiti引擎的Identify模块作为系统的用户数据管理模块,您真是奇才-开个玩笑 方案一:调用IdentifyS