Ios Swift:在只下载一次的情况下多次使用托管JSON文件内容的最佳方法

Ios Swift:在只下载一次的情况下多次使用托管JSON文件内容的最佳方法,ios,json,swift,Ios,Json,Swift,我的应用程序使用11个JSON文件中的数据(每个文件大小在70 kb到200 kb之间)。在同一用户会话期间,用户可能会在不同的时间访问11个文件中的任何一个文件中的数据。很明显,我只想下载这些文件一次,并且我希望能够在同一会话期间随时访问它们的内容。 当应用程序启动时,我会立即下载文件,然后允许用户在任何地方导航(见下面代码中的1个文件,但其他文件也是如此) 目前,我将每个文件的内容存储在一个静态字符串数组中,以便可以从任何其他类访问它 问题: 1.在内存方面,这对性能有危险吗? 2.在用户会

我的应用程序使用11个JSON文件中的数据(每个文件大小在70 kb到200 kb之间)。在同一用户会话期间,用户可能会在不同的时间访问11个文件中的任何一个文件中的数据。很明显,我只想下载这些文件一次,并且我希望能够在同一会话期间随时访问它们的内容。 当应用程序启动时,我会立即下载文件,然后允许用户在任何地方导航(见下面代码中的1个文件,但其他文件也是如此) 目前,我将每个文件的内容存储在一个静态字符串数组中,以便可以从任何其他类访问它

问题: 1.在内存方面,这对性能有危险吗? 2.在用户会话期间,阵列变量是否可以以任何方式清空、销毁或丢失(例如,如果用户按下Home按钮,并使用手机执行需要大量内存的活动,然后返回到我的应用)? 3.是否有更好的实践来满足我的需要(例如singleton?)我希望避免使用NSUserDefaults存储文件

我现在正在做什么(使用Alamofire和SwiftyJSON)


我能想到的最好的方法就是下载json并将其存储为应用程序中的文件。然后,如果内容可能已经更新,您应该在应用程序启动时用新文件覆盖以前下载的文件

以下是从中获取的用于在本地存储和检索json文件的示例代码:

-(void)saveJsonWithData:(NSData *)data{
     NSString *jsonPath=[[NSSearchPathForDirectoriesInDomains(NSUserDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingFormat:@"/data.json"];
     [data writeToFile:jsonPath atomically:YES];
}

-(NSData *)getSavedJsonData{
    NSString *jsonPath=[[NSSearchPathForDirectoriesInDomains(NSUserDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingFormat:@"/data.json"];
    return [NSData dataWithContentsOfFile:jsonPath]
}

如果您需要快速翻译的帮助,请告诉我:)

我不认为将11*200KB的内存作为单例数组共享是一项繁重的操作

关于将应用程序发送到后台,如果应用程序由IOS运行,内容将不会重置,但如果关闭,当您再次打开应用程序时,将获得新的启动,并且从一开始就启动阵列内容


关于每次发布下载,我建议使用expire或new data标志,您应该将它们存储在文件/coreData或任何其他替代文件中,最好实现
Codable
,将它们作为
数据
读取到对象,反之亦然,保存时

您只需下载这些文件并将其作为文件存储即可。每次启动时,您都可以用新文件覆盖以前下载的文件。您好,谢谢您的回答。当应用程序关闭时,您能否确认文件内容中的数据将从缓存中删除?还是放在某个地方?如果数据没有被完全删除,用户是否可以在他的设备上找到它?当数据被下载并存储到您想要的任何位置时,只有当应用程序从设备上删除时,数据才会被删除。如果我不清楚,我的意思是,如果数据存储在静态数组中,我知道只要应用程序打开,数据就会被保留,即使是在后台,但它是在应用程序关闭时被完全擦除,还是留在设备的某个缓存中?@它不会在任何地方缓存它,谢谢@Sh_KhanThanks的回答。正如我在OP中所说,我不希望将内容存储在file@Don您声明“我希望避免使用NSUserDefaults存储文件”,而我的解决方案不是将文件存储在
NSUserDefaults
中,因为它不是用来存储文件的。我提供的解决方案在内存方面没有任何缺陷
[{"id":0,"message":"my message 0"}, {"id":1,"message":"my message 1"}, ...
-(void)saveJsonWithData:(NSData *)data{
     NSString *jsonPath=[[NSSearchPathForDirectoriesInDomains(NSUserDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingFormat:@"/data.json"];
     [data writeToFile:jsonPath atomically:YES];
}

-(NSData *)getSavedJsonData{
    NSString *jsonPath=[[NSSearchPathForDirectoriesInDomains(NSUserDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingFormat:@"/data.json"];
    return [NSData dataWithContentsOfFile:jsonPath]
}