zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

iOS 本地轻量级数据存储之NSUserDefaults详解手机开发

ios存储数据手机开发 详解 本地 轻量级
2023-06-13 09:20:14 时间
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] ;

5946.html

app程序应用开发手机开发无线开发移动端开发