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

有一个UITextView,允许用户输入文本以及添加图像。当用户完成输入并单击“done”按钮时,它将被保存到CoreData中,并显示在TableView中。
这里是在单击“done”按钮时保存内容的方式:
创建一个私有MOC,并将AppDelegates managedObjectContext指定为其父MOC。
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)")
}
}有两个问题:
对如何解决这些问题有什么建议吗?谢谢!
发布于 2017-04-17 16:41:03
在用例中,这些问题将很难防止。通过在包含图像的NSCoding上使用NSAttributedString,您需要的是一个二进制blob,其中您无法以任何方式控制编码过程。
NSAttributedString如何处理它。所以你可能被大数据量困住了。NSAttributedString在内部做什么,但很可能大部分时间都花在处理图像上。如果您自己编码属性字符串,而不是使用可转换属性,您可能会提高节省时间。然后,您可以在后台提前开始编码,而不是在保存数据时进行编码。您可能无法确定编码时间,但您可能能够使其发生得更早,并且不那么引人注目。不过,我认为只要使用编码的属性字符串,您就会被限制在大小上。
我不知道你的应用程序在做什么,但如果你能摆脱潜在的大规模NSAttributedString,你就会避免你遇到的问题。
https://stackoverflow.com/questions/43454065
复制相似问题