iOS 本地轻量级数据存储之NSUserDefaults详解手机开发
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。比如说我们要存储
用户名(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程序应用开发手机开发无线开发移动端开发相关文章
- 2022超详细流程ios APP最新打包上线教程,保证一看就会!
- iOS小技能:因境外IP无法访问导致 App 被拒的解决方案
- AnyMP4 iOS Cleaner for mac(IOS文件清理工具)v1.0.16激活版
- iOS上架流程
- Ios上架app无需688,xcode打包导出IPA,供人内测
- HBuilder X 连接苹果手机(IOS)详细教程。Windows: 连接iOS手机调试项目
- 知乎高赞:iOS 为什么感觉比 Android 流畅?
- 2017年校园招聘ios面试题详解手机开发
- ios基础:iOS改变状态栏字体颜色详解手机开发
- 在iOS上搭建MySQL数据库连接(ios连接mysql数据库)
- appLinux开发探索之路:从iOS APP开始(linux开发ios)
- Linux与iOS:同源不同道(linux与ios的关系)
- 操作系统比较:iOS 与 Linux 操作系统(ios与linux)
- 比较iOS和Linux:谁更具优势?(ios和linux)
- 在iOS上安装Linux系统的挑战(ios上安装linux)
- 华为P40 Pro用户分享鸿蒙系统体验以为误入iOS
- 苹果奇怪的问题+1:当iOS时区设置为黎巴嫩贝鲁特时闹钟无限崩溃
- iOS 不是 Linux,而是苹果独特操作系统(ios是linux吗)
- iOS访问MySQL数据库的实战技术(ios访问mysql)
- iOS开发与Linux的技术融合(ios开发linux)
- 间谍软件“飞马”监视超 50 个国家手机用户,苹果 iOS 系统也未能幸免
- 三星新发布的Galaxy Watch 4智能手表不兼容iOS系统