首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在NSAttributedString中添加图像并保存到核心数据性能中

在NSAttributedString中添加图像并保存到核心数据性能中
EN

Stack Overflow用户
提问于 2017-04-17 15:06:05
回答 1查看 563关注 0票数 0

在将包含图像的NSAttrbutedString保存到核心数据时,我遇到了这个巨大的性能问题。

有一个UITextView,允许用户输入文本以及添加图像。当用户完成输入并单击“done”按钮时,它将被保存到CoreData中,并显示在TableView中。

这里是在单击“done”按钮时保存内容的方式:

创建一个私有MOC,并将AppDelegates managedObjectContext指定为其父MOC。

代码语言:javascript
复制
privateMOC = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
privateMOC.parent = managedObjectContext

privateMOC.perform {
    do {
      try self.privateMOC.save()

      self.managedObjectContext.performAndWait {
        do {
          try self.managedObjectContext.save()
        } catch {
          fatalError("Failure to save context: \(error)")
        }
      }
    } catch {
      print("Could not save \(error)")
    }
  }

有两个问题:

  1. 取决于图像,当我单击“完成”按钮时,UI将被阻塞,并在视图被驳回并显示在TableView中之前花费3-5秒。
  2. 我检查了实际的数据库.sqlite并发现,一个新添加的条目(UITextView中的文本和图像)使数据库大小几乎增加了12 in !(也许这些图像占用了太多的空间?)

对如何解决这些问题有什么建议吗?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2017-04-17 16:41:03

在用例中,这些问题将很难防止。通过在包含图像的NSCoding上使用NSAttributedString,您需要的是一个二进制blob,其中您无法以任何方式控制编码过程。

  • 可能是图像大小膨胀了,例如,因为您保存的是未压缩的数据,而不是PNG或JPEG。但是您不能对此做任何事情,因为您无法控制NSAttributedString如何处理它。所以你可能被大数据量困住了。
  • 较长的处理时间可能与前一点有关--您无法控制NSAttributedString在内部做什么,但很可能大部分时间都花在处理图像上。

如果您自己编码属性字符串,而不是使用可转换属性,您可能会提高节省时间。然后,您可以在后台提前开始编码,而不是在保存数据时进行编码。您可能无法确定编码时间,但您可能能够使其发生得更早,并且不那么引人注目。不过,我认为只要使用编码的属性字符串,您就会被限制在大小上。

我不知道你的应用程序在做什么,但如果你能摆脱潜在的大规模NSAttributedString,你就会避免你遇到的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43454065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档