玩一玩MMKV存储利器(iOS篇)

4,692 阅读2分钟

使用原因:Android SharedPreferences多线程取值失效,有位熊兄弟推荐使用香飘飘MMKV存储利器,不香赔钱。然而我抱着赔钱的心态玩了一下,真香!!

MMKV优势

  • 使用零拷贝技术之一mmap内存映射的key-value组件,用户空间可以共享内核空间的数据,减少内核空间到用户空间的拷贝次数
  • 采用性能最佳的protobuf协议
  • 稳定,最先使用在iOS中,后续Android也可以使用这真香利器
  • 性能比NSUserDefaults香多了 真香性能

那就开始玩耍吧~~~

通过CocoaPods安装

  • Podfile文件,添加 pod 'MMKV'
  • 头文件添加#import <MMKV/MMKV.h>

初始化

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [MMKV initializeMMKV:nil];
    return YES;
}

真香使用

// 创建默认实例
MMKV *mmkv = [MMKV defaultMMKV];

// 创建自定义的实例 
MMKV *mmkv2 = [MMKV mmkvWithID:@"test"];

// set 布尔值
[mmkv setBool:YES forKey:@"bool"];
// get 布尔值
[mmkv getBoolForKey:@"bool"];
    
// set值 32位整形
[mmkv setInt32:-1024 forKey:@"int32"];
// get值 32位整形
[mmkv getInt32ForKey:@"int32"];

// set值 32位无符号整形
[mmkv setUInt32:std::numeric_limits<uint32_t>::max() forKey:@"uint32"];
// get值 32位无符号整形
[mmkv getUInt32ForKey:@"uint32"];

// set值 64位整形
[mmkv setInt64:std::numeric_limits<int64_t>::min() forKey:@"int64"];
// get值 64位整形
[mmkv getInt64ForKey:@"int64"];

// set值 64位无符号整形
[mmkv setUInt64:std::numeric_limits<uint64_t>::max() forKey:@"uint64"];
// get值 64位无符号整形
[mmkv getInt64ForKey:@"uint64"];

// set值 字符串
[mmkv setString:@"hello, mmkv" forKey:@"string"];
// get值 字符串
[mmkv getStringForKey:@"string"];

// set值 float
[mmkv setFloat:30.0 forKey:@"float"];
// get值 float
[mmkv getFloatForKey:@"float"];

// set值 double
[mmkv setDouble:std::numeric_limits<double>::max() forKey:@"double"];
// get值 double
[mmkv getDoubleForKey:@"double"];

// set值 object
[mmkv setObject:nil forKey:@"string"];
// get值 object
[mmkv getObjectOfClass:NSString.class forKey:@"string"];

// set值 date
[mmkv setDate:[NSDate date] forKey:@"date"];
// get值 date
[mmkv getDateForKey:@"date"];

// 获取所有keys
[mmkv allKeys];

// 获取总数
mmkv.totalSize;

// 是否存在key
[mmkv containsKey:@"string"];

// 删除单个
[mmkv removeValueForKey:@"test"];

// 删除多个
[mmkv removeValuesForKeys:@[@"test1", @"test2"]];

// 删除缓存,不删除磁盘文件
[mmkv clearMemoryCache];

// 删除所有键值,删除磁盘文件
[mmkv close];

Android 篇请跳转此地址:juejin.cn/post/696680…