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 基本使用

存储和取值

支持的数据类型:NSStringBOOlint16_tuint16_tint32_tuint32_tint64_tuint64_tfloatdoubledata

每个存储方法有普通的设置方法还有对应的可传默认值的 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_tuint16_tint32_tuint32_tint64_tuint64_t。示例代码如下,包含 int16_tuint16_t 两种。int32_tuint32_tint64_tuint64_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];
下一步:

API 参考

性能对比

Copyright © 民生科技有限公司 2019 all right reserved,powered by Gitbook联系方式: wanglihang@mskj.com
修订时间: 2019-09-03 17:48:17

results matching ""

    No results matching ""