【发布时间】:2011-06-01 21:27:08
【问题描述】:
顺便说一句,如果您保存在背景上 线程,你还需要考虑什么 当您的应用程序终止时发生 正在进行保存操作时。 后台线程被正确杀死 离开,而看门狗等待 5 主线程完成的秒数 起来。
现在我整天都在实现 NSOperation 并直接在 NSOperation 子类中创建 NSManagedObjectContext 实例,因此每个 NSOperation 都拥有自己的非共享 MOC。但现在这是一个非常坏的消息,因为这样的场景可能一直在发生,会破坏 Core Data 数据库。我的意思是它不能开始在 sqlite3 文件中写入半字节的内容,然后立即停止。
然后还有另一个问题:在我的 NSOperations 中,我还使用 NSFileManager 进行文件 I/O。
那我该怎么办呢?我必须在我的应用程序中跟踪所有正在运行的 NSOperations 和 NSOperationQueues 并在应用程序终止时在 App Delegate 中快速处理它们,以便我可以将 NSOperations 告诉 SFF(快速保存 F*****g)或取消所有操作,抓住他们的 MOC 并立即“硬保存”它们?解决此问题的最佳做法是什么?
为什么我在职业生涯中第一次听到这个消息?我的意思是 NSOperationQueue 和 Core Data 提到的书籍都没有提到这一点,但它似乎是一个随机的应用程序杀手,如果我们不明确注意这一点,它会迫使用户重新安装(并可能丢失大量数据)。
【问题讨论】:
-
我开发了这个 NSOperation 子类来做你所说的github.com/veritech/FRCoreDataOperation。在我的应用程序的平均运行期间,我将创建超过 100 个在串行 NSOperationQueue 中运行的应用程序。每当应用程序终止/后台运行时,我都会取消所有操作,并且我从未遇到过损坏问题。随意查看课程,也许它可能会对您有所帮助。
-
您必须在保存操作的中间取消它,因为它可能在现实中发生。这才是真正的问题。
标签: iphone ios core-data concurrency nsmanagedobjectcontext