ios – 大多数情况下是否需要异步核心数据?

我已经了解到,一般来说,密集型任务应该在后台线程上进行,就像它们在主线程上一样,它们会阻止用户交互和界面更新.

核心数据是否属于该保护伞?我收到了关于在UITableView中异步加载图像的问题的great answer,但我很好奇如何使用Core Data作为后端.

我知道Apple有一个Core Data Concurrency指南,但我很好奇在哪种情况下应该在后台使用Core Data.

作为一个简单的例子,假设我正在制作一个Twitter客户端,并希望获得所有推文信息(推文文本,用户名,用户头像,链接图像等).我异步下载该信息并从Twitter API接收一些我随后解析的JSON.当我将信息添加到Core Data时,我应该执行dispatch_async(dispatch_get_main_queue()…)吗?

我还想下载用户的头像,但我想单独发布推文,这样我就可以尽快快速地发布推文,然后在准备好时呈现图像.所以我异步下载图像.我应该异步更新该核心数据项吗?

我是否处于根本不需要多线程核心数据的情况下?如果是的话,何时会出现需要的情况?

最佳答案 核心数据确实属于这一范畴.特别是对于下载和保存数据,但也可能取决于数据存储中的对象数量和要应用的谓词.

通常,我会将所有来自服务器的对象创建和保存推送到后台线程.我只会在主线程上更新并保存对象,如果它们是用户生成的(因为它只是一个,缓慢且不经常更新).

下载您的Twitter数据就是一个很好的例子,因为可能需要处理大量数据.您应该在后台线程上处理并保存数据,并将其保存到那里的持久存储中.然后,持久性存储应该将更改合并到主线程上下文中(假设您已经很好地配置了上下文 – 使用像MagicalRecord那样的第三方框架).

再次,对于头像更新,你已经在后台线程,所以你不妨留在那里:-)

您现在可能不需要使用多个线程.如果您只下载了5条最新的推文,那么您可能不会注意到这些差异.但是使用框架可以使多线程相对容易.并且使用获取的结果控制器可以非常容易地知道何时应该在主线程上更新UI.因此,花时间了解设置并使用它是值得的.

点赞