【问题标题】:IOS How to save and load JSON String to memoryIOS如何保存JSON字符串并将其加载到内存
【发布时间】:2016-12-28 23:21:27
【问题描述】:

我正在使用 NSUserDefaults.standardUserDefaults() 将我从 WebService 获得的 JSON 字符串保存到 iPhone 内存中。当我加载它以与我的解析器功能一起使用时,处理速度非常慢。我不想使用 RealmIO 或任何数据库,因为那不是必需的。我想问有没有比NSUserDefaults更快的方法? Please check my JSON file (I need store more than 20 files like that)

【问题讨论】:

  • 不是 JSON 字符串,而是 JSON 数据。 JSON 文档不是字符串。所有接口都期望或产生 NSData。

标签: ios json swift caching save


【解决方案1】:

与其将数据保存到NSUserDefaults,不如将​​其保存到不同的文件中,这样会更有效率。

你可以这样做:

// Build file url
let documentsURL = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).last!
let fileURL = documentsURL.URLByAppendingPathComponent("file_1.json", isDirectory: false)

// Write
let jsonString = "..."
let jsonData = jsonString.dataUsingEncoding(NSUTF8StringEncoding)
do {
    try jsonData?.writeToURL(fileURL, options: NSDataWritingOptions())
} catch {
    NSLog("Writing file to `\(fileURL)` failed with error : \(error)")
}

// Read
do {
    let jsonData = try NSData(contentsOfURL: fileURL, options: NSDataReadingOptions())
    let jsonString = String(data: jsonData, encoding: NSUTF8StringEncoding)
} catch {
    NSLog("Reading file at url `\(fileURL)` failed with error : \(error)")
}

【讨论】:

    【解决方案2】:

    NSUserDefaults 不是数据库。如果您的 JSON 文档超过 100 KB,请将它们存储到单独的文档中。请注意,每次更改 any 用户默认值时,都必须将所有用户默认值写入文件。如果您有 20 个每个 1MB 的 JSON 文档,那么您更改的 每个 用户默认写入 20MB 或更多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-29
      • 2020-06-30
      相关资源
      最近更新 更多