FireflyKV 使用指南
初始化
支持普通
、自带加密
、自定义加密
三种方式初始化。
普通
FireflyKV *fireflyKV = [FireflyKV fireflyKVWithPath:demoPath];
或者
FireflyKV *fireflyKV = [FireflyKV fireflyKVWithPath:demoPath KeyData:nil fireflyKVType:FireflyKVTypeNone];
KV 支持的加密方式
目前仅支持 ChaCha20 加密存储,后续会扩展加密方式。
NSData *keyData = [@"ceshi" dataUsingEncoding:NSUTF8StringEncoding];
FireflyKV *fireflyKV = [FireflyKV fireflyKVWithPath:demoPath KeyData:keyData fireflyKVType:FireflyKVTypeChaCha20];
自定义加密
需要遵守协议 FireflyKVEncryptDelegate
并实现代理 encrypeDelegate
。在代理方法中进行加密或者解密,并返回处理后的 NSData
类型的值。
FireflyKV *fireflyKV = [FireflyKV fireflyKVWithPath:demoPath KeyData:nil fireflyKVType:FireflyKVTypeCustom];
fireflyKV.encrypeDelegate = self;
遵守 FireflyKVEncryptDelegate
需要实现的代理方法:
- (NSData *_Nullable)fireflyKV_customEncryptData:(NSData *_Nullable)valueData
{
NSData *key = [@"12345678876543211234567887654321" dataUsingEncoding:NSUTF8StringEncoding];
NSData * iv = [@"1234567887654321" dataUsingEncoding:NSUTF8StringEncoding];
id<FireflySymmetryCryptoInterface> cipher = [FireflySymmetryCryptoHelper getImplementationWithType:FireflySymmetryCrypto_AES];
NSData *encData = [cipher encryptData:valueData Key:key ivector:iv mode:FireflySymmetryCryptoMode_CBC padding:FireflySymmetryCryptoPadding_PKCS7 error:nil];
return encData;
}
- (NSData *_Nullable)fireflyKV_customDecodeData:(NSData *_Nullable)valueData
{
NSData *key = [@"12345678876543211234567887654321" dataUsingEncoding:NSUTF8StringEncoding];
NSData * iv = [@"1234567887654321" dataUsingEncoding:NSUTF8StringEncoding];
id<FireflySymmetryCryptoInterface> cipher = [FireflySymmetryCryptoHelper getImplementationWithType:FireflySymmetryCrypto_AES];
NSData *decData = [cipher decryptData:valueData Key:key ivector:iv mode:FireflySymmetryCryptoMode_CBC padding:FireflySymmetryCryptoPadding_PKCS7 error:nil];
return decData;
}
当在一个程序中,多次使用同一个 KV 存储库路径和同种类型创建 FirelfyKV,会返回同一个 FireflyKV 对象。
API 基本使用
存储和取值
支持的数据类型:NSString
、BOOl
、int16_t
、uint16_t
、int32_t
、uint32_t
、int64_t
、uint64_t
、float
、double
、data
。
每个存储方法有普通的设置方法还有对应的可传默认值的 API,当查不到值时,将默认值返回。
字符串
/*字符串值取值*/
NSString *keyString = @"FireflyKV_testString";
BOOL resultString = [fireflyKV setString:@"Hello world!" forKey:keyString];
if (resultString) {
NSLog(@"key:%@ value:%@ 存储成功",keyString,@"Hello world");
}else
{
NSLog(@"key:%@ value:%@ 存储失败",keyString,@"Hello world");
}
/*字符串值取值*/
NSString *valueString = [fireflyKV getStringForKey:keyString];
if (valueString) {
NSLog(@"value 为 %@",valueString);
}else
{
NSLog(@"value 为 %@",valueString);
}
字符串值可以为空,如果 KV 存储库中有 key 对应的 value,则会从 KV 存储库中移除对应 key 的值。
BOOL 值
/*BOOL 值存储*/
NSString *keyBool = @"FireflyKV_testBool";
BOOL resultBool = [fireflyKV setBool:YES forKey:keyBool];
if (resultBool) {
NSLog(@"key:%@ value:YES 存储成功",keyBool);
}else
{
NSLog(@"key:%@ value:YES 存储失败",keyBool);
}
/*BOOL 值取值*/
BOOL valueBool = [fireflyKV getBoolForKey:keyBool];
if (valueBool) {
NSLog(@"value 为 YES");
}else
{
NSLog(@"value 为 NO");
}
int 值
包含 int16_t
、uint16_t
、int32_t
、uint32_t
、int64_t
、uint64_t
。示例代码如下,包含 int16_t
、uint16_t
两种。int32_t
、uint32_t
、int64_t
、uint64_t
类似。
/*int16_t 值存储*/
NSString *keyInt16_t = @"FireflyKV_testInt16_t";
BOOL resultInt16_t = [fireflyKV setInt16:12 forKey:keyInt16_t];
if (resultInt16_t) {
NSLog(@"key:%@ value:%d 存储成功",keyInt16_t,12);
}else
{
NSLog(@"key:%@ value:%d 存储失败",keyInt16_t,12);
}
/*int16_t 值取值*/
int16_t valueInt16_t = [fireflyKV getInt16ForKey:keyInt16_t];
NSLog(@"valueInt16_t 为 %d",valueInt16_t);
/*uint16_t 值存储*/
NSString *keyUInt16_t = @"FireflyKV_testUInt16_t";
BOOL resultUInt16_t = [fireflyKV setUInt16:12 forKey:keyUInt16_t];
if (resultUInt16_t) {
NSLog(@"key:%@ value:%d 存储成功",keyUInt16_t,12);
}else
{
NSLog(@"key:%@ value:%d 存储失败",keyUInt16_t,12);
}
/*uint16_t 值取值*/
uint16_t valueUInt16_t = [fireflyKV getUInt16ForKey:keyUInt16_t];
NSLog(@"valueUInt16_t 为 %d",valueUInt16_t);
double 值
/*double 值存储*/
NSString *keyDouble = @"FireflyKV_testDouble";
BOOL resultDouble = [fireflyKV setDouble:1.52 forKey:keyDouble];
if (resultDouble) {
NSLog(@"key:%@ value:%f 存储成功",keyDouble,1.52);
}else
{
NSLog(@"key:%@ value:%f 存储失败",keyDouble,1.52);
}
/*double 值取值*/
double valueDouble = [fireflyKV getDoubleForKey:keyDouble];
NSLog(@"valueDouble 为 %f",valueDouble);
float 值
/*float 值存储*/
NSString *keyFloat = @"FireflyKV_testFloat";
BOOL resultFloat = [fireflyKV setFloat:1.5 forKey:keyFloat];
if (resultFloat) {
NSLog(@"key:%@ value:%f 存储成功",keyFloat,1.5);
}else
{
NSLog(@"key:%@ value:%f 存储失败",keyFloat,1.5);
}
/*float 值取值*/
float valueFloat = [fireflyKV getFloatForKey:keyFloat];
NSLog(@"valueFloat 为 %f",valueFloat);
NSData
/*NSData 值存储*/
NSString *keyData = @"FireflyKV_testData";
NSData *dataValue = [@"你好" dataUsingEncoding:NSUTF8StringEncoding];
BOOL resultData = [fireflyKV setData:dataValue forKey:keyData];
if (resultData) {
NSLog(@"key:%@ value:%@ 存储成功",keyData,strData);
}else
{
NSLog(@"key:%@ value:%@ 存储失败",keyData,strData);
}
/*NSData 值取值*/
NSData *valueData = [fireflyKV getDataForKey:keyData];
NSString *valueResult = [[NSString alloc] initWithData:valueData encoding:NSUTF8StringEncoding];
NSLog(@"valueData 为 %@",valueResult);
NSData 值可以为空,如果 KV 存储库中有 key 对应的 value,则会从 KV 存储库中移除对应 key 的值。
删除
移除 KV 库中的为 key 的数据。
BOOL result = [fireflyKV removeValueForKey:key];
其它使用
是否包含 key
查看 KV 存储库中是否存储的有 key 对应的值。
[fireflyKV containsKey:key]
清空 KV 库数据
清空数据,但还可以继续增删改查。
[fireflyKV clearAll];
删除 KV 存储库
将 KV 存储库对应文件删除,无法继续增删改查。
BOOL result = [fireflyKV deleteKVDB];
移除内存中 存储的 KV 对象
从内存中,移除 path 对应的 KV 对象。
[fireflyKV close];