iOS 轻量级存储

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 条评论
登录 后参与评论

相关文章

来自专栏岑志军的专栏

iOS单独对年月日加减

2206
来自专栏分享达人秀

Intent 属性详解(下)

上一期学习了Intent的前三个属性,本期接着学习其余四个属性,以及Android系统常用内置组件的启动。 四、Data和Type属性 Dat...

2395
来自专栏向治洪

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

NSUserDefaults简介 在Android和ios都提供了本地轻量级数据存储,底层实现都是基于key-value的方式。Android里面的叫Share...

2378
来自专栏非著名程序员

WebView 的 input 上传照片的兼容问题

问题 前几天接到的一个需求,是关于第三方理财产品的 H5 上传照片问题。 对方说他们的新的需求,需要接入方配合上传资产照片的需求,测试之后发现我们这边的 ap...

3535
来自专栏酷玩时刻

Android极速开发之桌面快捷方式

测试发现快捷方式并没有创建,Bitmap必须是资源文件中BitmapDrawable转化过来的才会创建成功

893
来自专栏潇涧技术专栏

Android Development Code Snippets

781
来自专栏一个会写诗的程序员的博客

android 在一个应用中启动另一个应用android 在一个应用中启动另一个应用

在程序开发过程当中,常遇到需要启动另一个应用程序的情况,比如在点击软件的一个按钮可以打开地图软件。

974
来自专栏漫漫深度学习路

python绘图:matplotlib绘图(2)

matplotlib绘图(2) plt.bar colors=["#348ABD","#A60628"] plt.bar([0,.7], prior, alph...

1965
来自专栏酷玩时刻

Android极速开发之Apk安装

安装之前判断是否有root权限,如果有root权限就静默安转,如果没有就利用意图进行安装。源码参考地址

1213
来自专栏封碎

startActivity的requires new task异常解析 博客分类: Android小技巧 Android工作

Caused by: android.util.AndroidRuntimeException: Calling startActivity() from ou...

1174

扫码关注云+社区

领取腾讯云代金券