gpt4 book ai didi

ios - Swift:在仅下载一次的情况下多次使用托管 JSON 文件内容的最佳方式

转载 作者:行者123 更新时间:2023-11-28 14:25:33 24 4
gpt4 key购买 nike

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

问题:1. 明智的性能内存是否危险?2. 数组变量是否可以在用户 session 期间以任何方式被清空、销毁或丢失(例如,如果用户按下主页按钮并使用他的手机进行需要大量内存的事件,然后返回我的应用程序)?3. 是否有更好的做法满足我的需要(例如单例?)我想避免使用 NSUserDefaults 存储文件

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

class MyClass: UIViewController {

let username = "..."
let password = "..."
let url = "..."

static var staticArrayOfJS: [String] = []
var arrayOfJS: [String] = []

override func viewDidLoad() {
super.viewDidLoad()
fetchJS()
}

func fetchJS() { //this is intended to be executed only once
let credentialData = "\(username):\(password)".data(using: String.Encoding(rawValue: String.Encoding.utf8.rawValue))!
let base64Credentials = credentialData.base64EncodedString()
let headers = [
"Authorization": "Basic \(base64Credentials)",
"Accept": "application/json",
"Content-Type": "application/json" ]

Alamofire.request(url, method: .get, parameters: nil,encoding: URLEncoding.default, headers: headers) .responseJSON { response in
guard let data = response.data else {
print("no data returned")
return
}

do {
let json = try JSON(data: data)
let indexOfLastItem = json.array?.count
for i in 0..<indexOfLastItem! {
self.arrayOfJS.append(json[i]["message"].string!)
}
MyClass.staticArrayOfJS = self.arrayOfJS
}
catch {
print("error parsing json data")
}
}
}

static func getJSMessage(id: Int) -> String { // this is intended to be accessed from external classes, several times within the same user session
return staticArrayOfJS[id]
}
}

JSON 文件内容示例

[{"id":0,"message":"my message 0"}, {"id":1,"message":"my message 1"}, ...

最佳答案

我认为拥有 11 * 200KB 将近 2MB 内存共享为单例数组并不是一个繁重的操作

关于将应用程序发送到后台,如果应用程序由 IOS 保持运行,内容不会重置,但如果关闭,您将在再次打开它时重新启动,数组内容从头开始

关于每次启动的下载,我建议有过期或新数据标志,你应该将它们存储在文件/coreData 或任何其他替代方案中,最好实现 Codable,将它们读取为Data 保存到对象,反之亦然

关于ios - Swift:在仅下载一次的情况下多次使用托管 JSON 文件内容的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51628014/

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