gpt4 book ai didi

ios - 在 iOS 上,AsyncStorage 由 native 代码支持,该代码将小值存储在序列化字典中,将较大值存储在单独的文件中

转载 作者:行者123 更新时间:2023-11-29 00:33:56 25 4
gpt4 key购买 nike

标题为官网介绍。但我有一个问题。谁能解释一下“小”和“大”?在编程中,如果我有一个包含 20 个对象的模型。我应该将模型保存在 20 个单独的键值对中还是仅保存在一对中?哪个效率更高?

最佳答案

我刚刚挖了RCTAsyncLocalStorage的源代码,特别是这个 block :

- (NSDictionary *)_writeEntry:(NSArray<NSString *> *)entry changedManifest:(BOOL *)changedManifest
{
if (entry.count != 2) {
return RCTMakeAndLogError(@"Entries must be arrays of the form [key: string, value: string], got: ", entry, nil);
}
NSString *key = entry[0];
NSDictionary *errorOut = RCTErrorForKey(key);
if (errorOut) {
return errorOut;
}
NSString *value = entry[1];
NSString *filePath = [self _filePathForKey:key];
NSError *error;
if (value.length <= RCTInlineValueThreshold) {
if (_manifest[key] == (id)kCFNull) {
// If the value already existed but wasn't inlined, remove the old file.
[[NSFileManager defaultManager] removeItemAtPath:filePath error:nil];
[RCTGetCache() removeObjectForKey:key];
}
*changedManifest = YES;
_manifest[key] = value;
return nil;
}

[value writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:&error];

其中 RCTInlineValueThreshold 在 ( source ) 之前几行定义为:

静态常量 NSUInteger RCTInlineValueThreshold = 1024;

因此小于或等于 1024 的值(您的对象将被序列化为字符串)将存储在序列化字典中,而更大的对象将存储在单独的文件中。

至于将一个对象分散成n个键值对,可能会影响性能,因为你将不得不对存储进行n次查询(涉及从JS到Native的通信,反之亦然,这是一个昂贵的操作)而不是只需一次调用,但它也可能取决于查询数据的频率以及查询方式(例如,如果经常查询 1 个对象而其余的则不查询,则拆分它们以避免长字符串的序列化和反序列化可能是有意义的).

关于ios - 在 iOS 上,AsyncStorage 由 native 代码支持,该代码将小值存储在序列化字典中,将较大值存储在单独的文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41096819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com