FireflyKV 使用指南
初始化
支持普通
、自帶加密
、自定義加密
三種方式初始化。
普通
FireflyKV *fireflyKV = [FireflyKV fireflyKVWithPath:demoPath];
或者
FireflyKV *fireflyKV = [FireflyKV fireflyKVWithPath:demoPath KeyData:nil fireflyKVType:FireflyKVTypeNone];
KV 支持的(de)加密方式
目前僅支持 ChaCha20 加密存儲,後續會擴展加密方式。
NSData *keyData = [@"ceshi" dataUsingEncoding:NSUTF8StringEncoding];
FireflyKV *fireflyKV = [FireflyKV fireflyKVWithPath:demoPath KeyData:keyData fireflyKVType:FireflyKVTypeChaCha20];
自定義加密
需要(yào / yāo)遵守協議 FireflyKVEncryptDelegate
并實現代理 encrypeDelegate
。在(zài)代理方法中進行加密或者解密,并返回處理後的(de) NSData
類型的(de)值。
FireflyKV *fireflyKV = [FireflyKV fireflyKVWithPath:demoPath KeyData:nil fireflyKVType:FireflyKVTypeCustom];
fireflyKV.encrypeDelegate = self;
遵守 FireflyKVEncryptDelegate
需要(yào / yāo)實現的(de)代理方法:
- (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;
}
當在(zài)一(yī / yì /yí)個(gè)程序中,多次使用同一(yī / yì /yí)個(gè) KV 存儲庫路徑和(hé / huò)同種類型創建 FirelfyKV,會返回同一(yī / yì /yí)個(gè) FireflyKV 對象。
API 基本使用
存儲和(hé / huò)取值
支持的(de)數據類型:NSString
、BOOl
、int16_t
、uint16_t
、int32_t
、uint32_t
、int64_t
、uint64_t
、float
、double
、data
。
每個(gè)存儲方法有普通的(de)設置方法還有對應的(de)可傳默認值的(de) API,當查不(bù)到(dào)值時(shí),将默認值返回。
字符串
/*字符串值取值*/
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 爲(wéi / wèi) %@",valueString);
}else
{
NSLog(@"value 爲(wéi / wèi) %@",valueString);
}
字符串值可以(yǐ)爲(wéi / wèi)空,如果 KV 存儲庫中有 key 對應的(de) value,則會從 KV 存儲庫中移除對應 key 的(de)值。
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 爲(wéi / wèi) YES");
}else
{
NSLog(@"value 爲(wéi / wèi) 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 爲(wéi / wèi) %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 爲(wéi / wèi) %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 爲(wéi / wèi) %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 爲(wéi / wèi) %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 爲(wéi / wèi) %@",valueResult);
NSData 值可以(yǐ)爲(wéi / wèi)空,如果 KV 存儲庫中有 key 對應的(de) value,則會從 KV 存儲庫中移除對應 key 的(de)值。
删除
移除 KV 庫中的(de)爲(wéi / wèi) key 的(de)數據。
BOOL result = [fireflyKV removeValueForKey:key];
其它使用
是(shì)否包含 key
查看 KV 存儲庫中是(shì)否存儲的(de)有 key 對應的(de)值。
[fireflyKV containsKey:key]
清空 KV 庫數據
清空數據,但還可以(yǐ)繼續增删改查。
[fireflyKV clearAll];
删除 KV 存儲庫
将 KV 存儲庫對應文件删除,無法繼續增删改查。
BOOL result = [fireflyKV deleteKVDB];
移除内存中 存儲的(de) KV 對象
從内存中,移除 path 對應的(de) KV 對象。
[fireflyKV close];