【发布时间】:2011-01-09 13:35:52
【问题描述】:
我有一个基于 Core Data 的 iPhone 应用程序,需要在终止时保存 1000 个托管对象。这需要 8 秒以上的时间,但是,如果应用程序未在大约 10 秒内完成,操作系统会终止应用程序。 6 秒。
我不想提前保存对象,因为这样用户必须再等待 8 秒才能显示结果。
是否有可能以某种方式在后台线程中更早地保存对象,同时仍然可以(只读)访问主线程中的 NSManagedObjectContext 以显示数据?或者是否有可能复制托管对象,并将副本传递给后台线程进行保存?
为了澄清,下面是应用程序中现在发生的情况:我有一个后台线程,它在大约 1 秒内导入 1000 多个对象。如果我在导入时保存,则需要超过 1 秒的时间。因此,为了以最小的延迟显示这些项目,上下文在不保存到主线程的情况下被移交,并且用户尽可能快地得到他的结果。
我现在遇到了如何保存这些对象而无需用户等待 8 秒的问题。如果我在移交之前保存在后台线程中,则用户必须等待。如果我移交后保存在前台线程中,则用户必须等待。我现在能看到的唯一两种可能的方法是:
- 以某种方式让核心数据在后台执行其 sqlite 访问,同时仍保持主线程处于响应状态
- 将未保存的对象从一个上下文传递到另一个上下文,并保存在后台线程中
这两种方法似乎都是不可能的(至少根据 Core Data 文档)。那么除了让用户等待更长时间(并且可能显示一个漂亮的旋转沙漏:-)之外没有其他解决方案吗?
问候, 乔辰
【问题讨论】:
标签: performance multithreading core-data