本文主要是提供MMKV的代码使用教程,若是想知道更多关于MMKV的信息,能够点击如下连接,查看更多信息:html

2. MMKV浅析github

MMKV实际使用的代码案例以下:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

// Override point for customization after application launch.

[MMKV setLogLevel:MMKVLogNone];//关闭MMKV控制台打印的自带的辅助日志信息

[self kvCreateMethod];//建立MMKV的方法

[self compareMMKVWithNSUesrDefault];//比较MMKV和NSUserDefaults存储数据的效率

[self cLanguageDataType];//存储和读取C语言数据类型

[self ocLanguageDataType];//存储和读取OC语言数据类型

[self kvMigrateFromUserDefaults];//从NSUserDefaults迁移数据到MMKV

// [[MMKV defaultMMKV] clearAll];

//totalSize:文件分配的总磁盘空间4k;actualSize:存储文件占据的实际存储空间298byte

NSLog(@"count:%zu-----totalSize:%zu------actualSize:%zu-----allKeys:%@",[[MMKV defaultMMKV] count],

[[MMKV defaultMMKV] totalSize],[[MMKV defaultMMKV] actualSize],[[MMKV defaultMMKV] allKeys]);

//打印结果:count:7-----totalSize:4096------actualSize:298-----allKeys:(double,uint64,uint32,int32,bool,int64,float)

return YES;

}复制代码

建立MMKV的方法:ide

/*

//如下四种建立方法是彻底等价的,建立的是同一个MMKV实例

*/

- (void)kvCreateMethod

{

//MMKV文件存储的默认为~/Documents/mmkv

NSString *basePath = [MMKV mmkvBasePath];

//修改文件存储的默认路径,在建立MMKV实例以前设置

[MMKV setMMKVBasePath:@""];

//第一种建立方法

MMKV *defaultKV1 = [MMKV defaultMMKV];

//第二种建立方法

MMKV *defaultKV3 = [MMKV mmkvWithID:@"mmkv.default"];

//第三种建立方法

NSString *string = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

string = [string stringByAppendingPathComponent:@"mmkv"];

MMKV *defaultKV4 = [MMKV mmkvWithID:@"mmkv.default" relativePath:string];

//第四种建立方法

MMKV *defaultKV2 = [MMKV mmkvWithID:@"mmkv.default" cryptKey:nil relativePath:string];

}复制代码

比较MMKV和NSUserDefaults存储数据的效率:

ui

/*

写入10万个数据所用的时间

MMKV : 198.487043ms

NSUserDefaults : 13829.244971ms

*/

- (void)compareMMKVWithNSUesrDefault

{

CFAbsoluteTime startTime =CFAbsoluteTimeGetCurrent();

MMKV *customKV = [MMKV mmkvWithID:@"cn.meicai"];

for (int i=0; i<100000; i++) {

[customKV setInt32:i forKey:@"int32"];

}

CFAbsoluteTime linkTime = (CFAbsoluteTimeGetCurrent() - startTime);

NSLog(@"Linked in %f ms", linkTime *1000.0);

NSLog(@"------%d--------",[customKV getInt32ForKey:@"int32"]);

// CFAbsoluteTime startTime =CFAbsoluteTimeGetCurrent();

// NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];

// for (int i=0; i<100000; i++) {

// [userDefault setInteger:i forKey:@"int32"];

// }

// CFAbsoluteTime linkTime = (CFAbsoluteTimeGetCurrent() - startTime);

// NSLog(@"Linked in %f ms", linkTime *1000.0);

// NSLog(@"------%ld--------",(long)[userDefault integerForKey:@"int32"]);

}

复制代码

存储和读取C语言数据类型:

加密

/*

//支持如下 C 语语言基础类型:

//bool、int3二、int6四、uint3二、uint6四、float、double

*/

- (void)cLanguageDataType

{

MMKV *mmkv = [MMKV defaultMMKV];

[mmkv setBool:YES forKey:@"bool"];

NSLog(@"bool:%d", [mmkv getBoolForKey:@"bool"]);//打印结果:bool:1

[mmkv setInt32:-1024 forKey:@"int32"];

NSLog(@"int32:%d", [mmkv getInt32ForKey:@"int32"]);//打印结果:int32:-1024

[mmkv setUInt32:std::numeric_limits::max() forKey:@"uint32"];

NSLog(@"uint32:%u", [mmkv getUInt32ForKey:@"uint32"]);//打印结果:uint32:4294967295

[mmkv setInt64:std::numeric_limits::min() forKey:@"int64"];

NSLog(@"int64:%lld", [mmkv getInt64ForKey:@"int64"]);//打印结果:int64:-9223372036854775808

[mmkv setUInt64:std::numeric_limits::max() forKey:@"uint64"];

NSLog(@"uint64:%llu", [mmkv getInt64ForKey:@"uint64"]);//打印结果:uint64:18446744073709551615

[mmkv setFloat:-3.1415926 forKey:@"float"];

NSLog(@"float:%f", [mmkv getFloatForKey:@"float"]);//打印结果:float:-3.141593

[mmkv setDouble:std::numeric_limits::max() forKey:@"double"];

NSLog(@"double:%f", [mmkv getDoubleForKey:@"double"]);//打印结果:double:17976931348......24858368.000000

}复制代码

存储和读取OC语言数据类型:

spa

/*

支持如下 ObjC 类型:

NSString、NSData、NSDate

*/

- (void)ocLanguageDataType

{

//cryptKey 根据此秘钥建立AES加密器,加密后的数据存取方法不变,和未加密的同样

MMKV *mmkv = [MMKV mmkvWithID:@"cn.meicai" cryptKey:[@"crypt" dataUsingEncoding:NSUTF8StringEncoding]];

[mmkv setString:@"hello, mmkv" forKey:@"string"];

NSLog(@"string:%@ defaultValue:%@", [mmkv getStringForKey:@"string"],[mmkv getStringForKey:@"string111" defaultValue:@"mmmmmmmmmmmmmmmm"]);

//打印结果:string:hello, mmkv defaultValue:mmmmmmmmmmmmmmmm

[mmkv setObject:nil forKey:@"string"];

NSLog(@"string after set nil:%@, containsKey:%d",

[mmkv getObjectOfClass:NSString.class

forKey:@"string"],

[mmkv containsKey:@"string"]);

//打印结果:string after set nil:(null), containsKey:0

[mmkv setDate:[NSDate date] forKey:@"date"];

NSLog(@"date:%@ defaultValue:%@", [mmkv getDateForKey:@"date"],[mmkv getDateForKey:@"date111" defaultValue:[NSDate date]]);

//打印结果:date:Wed Jun 26 14:39:52 2019 defaultValue:Wed Jun 26 14:39:52 2019

[mmkv setData:[@"hello, mmkv again and again" dataUsingEncoding:NSUTF8StringEncoding] forKey:@"data"];

NSData *data = [mmkv getDataForKey:@"data"];

NSLog(@"data:%@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);

//打印结果:data:hello, mmkv again and again

}复制代码

从NSUserDefaults迁移数据到MMKV:

/*

从NSUserDefault迁移数据到MMKV的实例

*/

- (void)kvMigrateFromUserDefaults

{

[[NSUserDefaults standardUserDefaults] setObject:@"hello world" forKey:@"string"];

[[NSUserDefaults standardUserDefaults] synchronize];

MMKV *userDefaultKV = [MMKV mmkvWithID:@"NSUserDefault"];

[userDefaultKV migrateFromUserDefaults:[NSUserDefaults standardUserDefaults]];

[userDefaultKV enumerateKeys:^(NSString * _Nonnull key, BOOL * _Nonnull stop) {

if ([key isEqualToString:@"string"]) {

NSLog(@"string value is : %@",[userDefaultKV getStringForKey:key]);//打印结果:string value is : hello world

NSLog(@"string value is : %@",[userDefaultKV getObjectOfClass:[NSString class] forKey:key]);//打印结果:string value is : hello world

NSLog(@"string value is : %@",[userDefaultKV getObjectOfClass:[NSNumber class] forKey:key]);//打印结果:string value is : (null)

*stop = YES;

}

}];

}复制代码

MMKV_MMKV使用教程相关推荐

  1. 使用Docker搭建svn服务器教程

    使用Docker搭建svn服务器教程 svn简介 SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS.互联网上很 ...

  2. mysql修改校对集_MySQL 教程之校对集问题

    本篇文章主要给大家介绍mysql中的校对集问题,希望对需要的朋友有所帮助! 推荐参考教程:<mysql教程> 校对集问题 校对集,其实就是数据的比较方式. 校对集,共有三种,分别为:_bi ...

  3. mysql备份psb文件怎么打开_Navicat for MySQL 数据备份教程

    原标题:Navicat for MySQL 数据备份教程 一个安全和可靠的服务器与定期运行备份有密切的关系,因为错误有可能随时发生,由攻击.硬件故障.人为错误.电力中断等都会照成数据丢失.备份功能为防 ...

  4. php rabbmq教程_RabbitMQ+PHP 教程一(Hello World)

    介绍 RabbitMQ是一个消息代理器:它接受和转发消息.你可以把它当作一个邮局:当你把邮件放在信箱里时,你可以肯定邮差先生最终会把邮件送到你的收件人那里.在这个比喻中,RabbitMQ就是这里的邮箱 ...

  5. 【置顶】利用 NLP 技术做简单数据可视化分析教程(实战)

    置顶 本人决定将过去一段时间在公司以及日常生活中关于自然语言处理的相关技术积累,将在gitbook做一个简单分享,内容应该会很丰富,希望对你有所帮助,欢迎大家支持. 内容介绍如下 你是否曾经在租房时因 ...

  6. Google Colab 免费GPU服务器使用教程 挂载云端硬盘

    一.前言 二.Google Colab特征 三.开始使用 3.1在谷歌云盘上创建文件夹 3.2创建Colaboratory 3.3创建完成 四.设置GPU运行 五.运行.py文件 5.1安装必要库 5 ...

  7. 理解和实现分布式TensorFlow集群完整教程

    手把手教你搭建分布式集群,进入生产环境的TensorFlow 分布式TensorFlow简介 前一篇<分布式TensorFlow集群local server使用详解>我们介绍了分布式Ten ...

  8. 高级教程: 作出动态决策和 Bi-LSTM CRF 重点

    https://www.zhihu.com/question/35866596 条件随机场 CRF(条件随机场)与Viterbi(维特比)算法原理详解 https://blog.csdn.net/qq ...

  9. PyTorch 高级实战教程:基于 BI-LSTM CRF 实现命名实体识别和中文分词

    20210607 https://blog.csdn.net/u011828281/article/details/81171066 前言:译者实测 PyTorch 代码非常简洁易懂,只需要将中文分词 ...

  10. k8s核心组件详细介绍教程(配超详细实例演示)

    本文实验环境基于上篇文章手把手从零开始搭建k8s集群超详细教程 本文根据B站课程云原生Java架构师的第一课K8s+Docker+KubeSphere+DevOps学习总结而来 k8s核心组件介绍 1 ...

最新文章

  1. 面试造飞机这么能耐,对着调优实战更不能怂啊!
  2. 前Citrix CTO认为虚拟化将解决现有的安全问题
  3. C++遍历树-非递归递归-使用了标记位
  4. Java EE,Gradle和集成测试
  5. 用FileZilla Server搭建ftp服务器
  6. MS SQL数据库备份和恢复存储过程
  7. iOS UITextField限制输入字数
  8. java入门之IDE开发工具:简介·下载·安装
  9. unity 给图片边缘_Unity 截图选择框,中间全透明,边缘半透明
  10. 多组两两比较用什么检验方法_SPSS教程:多个组比较(Fisher精确检验)及组间两两比较...
  11. ubuntu18.04安装wine+caj阅读器
  12. webrtc中的码率控制
  13. 随心所遇,随遇而安。
  14. CTF--web学习
  15. 基于异构网络节点表示的推荐系统(HERec)
  16. 老熊一亩三分地里的Oracle工具
  17. 微电影制作迅速走红的原因
  18. #include “sndfile.h“读取音频文件的使用方法
  19. html 在盒子中字体垂直,第五章,css行内盒模型和文字样式
  20. linux操作系统应用技术 周志敏,Linux操作系统应用技术

热门文章

  1. Pikachu靶机系列之目录遍历、任意文件下载、敏感信息泄露、越权
  2. Kettle下载与安装
  3. kali2018安装教程_Kali更新安装firefox教程
  4. 乒乓球单循环赛_乒乓球循环赛制比赛方法
  5. 如何搭建属于自己的网站博客?(手把手教你)
  6. 光盘DOS启动盘制作
  7. Eclipse —— 官网下载地址
  8. 初入PLC编程(基本理论知识)
  9. mysql alter auto increment_将MySQL列更改为AUTO_INCREMENT
  10. 操作系统android9.0,三星公布了升级Android9.0操作系统的时间表