iOS 本地轻量级数据存储之NSUserDefaults

NSUserDefaults简介

在Android和ios都提供了本地轻量级数据存储,底层实现都是基于key-value的方式。Android里面的叫SharedPreferences,ios的叫NSUserDefaults,使用上也是非常的简单。我们先看一看NSUserDefaults的API。

#import <Foundation/NSObject.h>

@class NSArray<ObjectType>, NSData, NSDictionary<KeyValue, ObjectValue>, NSMutableDictionary, NSString, NSURL;

NSUserDefaults 是一个单例,所以就不存在全局问题,需要用到的时候直接取就可以,随时存取,十分方便。 NSUserDefaults支持的数据类型有:NSNumber(Integer、Float、Double),NSString,NSDate,NSArray,NSDictionary,BOOL。

NSUserDefaults实例

下面我们以一个第一次登录记住密码的功能来讲讲NSUserDefaults。比如说我们要存储 用户名(NSString):userName 密码(NSNumber):userPassword 用户信息(NSDictionary):userInfo

那么我们可以定义如下:

    NSString *userName=@"xzh";
    NSNumber *userPassword=@123456;
    NSDictionary *userInfo=@{
                             @"age":@29,
                             @"sex":@"male"
                             };
    BOOL isOn=YES;

接着我们使用NSUserDefaults开始对资料进行存储。

 [[NSUserDefaults standardUserDefaults] setObject:userName forKey:@"name"];
    [[NSUserDefaults standardUserDefaults] setInteger:[userPassword integerValue] forKey:@"password"];
    [[NSUserDefaults standardUserDefaults] setObject:userInfo forKey:@"info"];
    [[NSUserDefaults standardUserDefaults] setBool:isOn forKey:@"isOn"];

 //调用synchronize存储
    [[NSUserDefaults standardUserDefaults] synchronize];

取数据的方法跟存是一样的,取出数据。

NSString *userName=[[NSUserDefaults standardUserDefaults] objectForKey:@"name"];
    NSInteger userPassword=[[NSUserDefaults standardUserDefaults] integerForKey:@"password"];
    NSDictionary *userInfo=[[NSUserDefaults standardUserDefaults] dictionaryForKey:@"info"];
    BOOL isOn=[[NSUserDefaults standardUserDefaults] boolForKey:@"isOn"];

一些其他的方法,如根据键移除某一数据等。

//移除某一键值对
    [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"name"];
//或者设置为空
    [[NSUserDefaults standardUserDefaults] setObject:nil 
//获取所有的数据
    NSDictionary *allDic=[[NSDictionary alloc]initWithDictionary: [[NSUserDefaults standardUserDefaults]dictionaryRepresentation]];

NSUserDefaults只能存储一些简单的数据类型,如果要存取一些复杂类型的数据(例如实体类),就需要对数据进行归档后转为NSData后存取。

//存一个类 ClassA
ClassA *bc = [[ClassA alloc] init];     
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];     
NSData *saveObject = [NSKeyedArchiver archivedDataWithRootObject:bc];     
[ud setObject:saveObject forKey:@"ClassA"];     
//下面是取出
NSData *getObject = [ud objectForKey:@"myBusinessCard"];    
ClassA *bcNew = [[ClassA alloc] init];   
bcNew = [NSKeyedUnarchiver unarchiveObjectWithData:getObject] ;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏phodal

我的技术投资策略:如何决定学习哪一个新技术的?

软件开发不是一份稳定的工作:每年都会涌现一个又一个新的技术,每隔几年都会出现一些革命性的技术。尽管从代码、表现及差异上来看,新技术和旧的技术有一些概念上的相似,...

23090
来自专栏向治洪

iOS Hybrid 框架

前言 Hybrid App(混合模式移动应用)是指介于web-app、native-app这两者之间的app,兼具“Native App良好用户交互体验的优势”...

55180
来自专栏大数据

物联网中的大数据架构、应用案例以及带来的好处

作者:周硕彦 第一节 简介 近年来“物联网”(IoT)和“大数据”是两个最受瞩目的话题。在物联网的概念里,有关任何开和关切换到网络的设备皆会彼此连接,它们之间都...

28470
来自专栏应用案例

iOS开发进阶篇——FRP与ReactiveCocoa的介绍(一)

*****阅读完此文,大约需要30分钟***** 本篇章主要以介绍FRP以及RAC的信号相关概念为主。 一、FRP的概念 RAC(ReactiveCocoa)是...

19390
来自专栏phodal

我的技术投资策略:如何决定学习哪一个新技术的?

软件开发不是一份稳定的工作:每年都会涌现一个又一个新的技术,每隔几年都会出现一些革命性的技术。尽管从代码、表现及差异上来看,新技术和旧的技术有一些概念上的相似,...

20090
来自专栏向治洪

iOS 滚动视图的复用问题解决方案

##LazyScroll是什么 LazyScrollView 继承自ScrollView,目标是解决异构(与TableView的同构对比)滚动视图的复用回收问题...

289100
来自专栏phodal

前端写一个月的原生 Android 是怎样一种体验?

一个前端程序员的一个月原生 Android 开发体验。自从我写了 Android 应用后,上知乎的时间变得更长了。 自从我写了 Android 应用后,上知乎的...

279100
来自专栏向治洪

FLAnimatedImage -ios gif图片加载框架介绍

简介 FLAnimatedImage 是 Flipboard 团队开发的在它们 App 中渲染 GIF 图片使用的库。 后来 Flipboard 将 FLAni...

40170
来自专栏向治洪

ios打包ipa文件并上传到托管平台

当我们开发完app后,需要将ipa/apk提交给测试人员测试,然后才能上线。下面就来看一下如何打包ipa文件,并上传托管平台。 做过ios开发的童鞋都知道,io...

53360
来自专栏向治洪

iOS 组件化之路由设计思路分析

前言 随着用户的需求越来越多,对App的用户体验也变的要求越来越高。为了更好的应对各种需求,开发人员从软件工程的角度,将App架构由原来简单的MVC变成MVVM...

99560

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励