我最近阅读了核心数据编程指南,Apple 建议我们这样做
您在后台线程上获取一个托管对象上下文,并将获取的对象的对象 ID 传递给另一个线程。在第二个线程(通常是应用程序的主线程,以便您随后可以显示结果)中,您使用第二个上下文在具有这些对象 ID 的对象中出错(您使用 objectWithID: 来实例化对象)。(此技术仅在使用 SQLite 存储时才有用,> 因为来自二进制和 XML 存储的数据在打开时会立即读入内存。)
据我了解,在后台上下文中获取不会在主线程上下文中注册托管对象,因此从 objectWithID 返回的托管对象很可能是错误的。当我们在主线程上使用它时,我们将触发新一轮的 SQLite Store 之旅。所以用户界面可能被阻止了。
我错过了什么吗?有没有办法避免主线程上的 I/O 开销?