可以在单独的线程中使用 NSFetchedResultsController 来加载 TableViewCells 吗?

Posted

技术标签:

【中文标题】可以在单独的线程中使用 NSFetchedResultsController 来加载 TableViewCells 吗?【英文标题】:OK to use NSFetchedResultsController in separate thread to load TableViewCells? 【发布时间】:2013-12-28 02:35:54 【问题描述】:

基本上我正在尝试加载一个充满CoreData 实体的UITableView。我想将NSFetchedResultsController 的批量大小设置为0,然后使用GCD 线程在每个单元格上加载每个对象:

[_fetchedResultsController objectAtIndexPath:indexPath]; 

这个线程安全吗?

【问题讨论】:

【参考方案1】:

不,您的获取结果控制器和表格视图都不是线程安全的。

如果我没记错的话,您可以从后台线程执行核心数据,但是您需要为每个线程单独的 NSManagedObjectContext 来访问您的数据。

在任何情况下,您都不能从单独的后台线程进行 UI 更改(例如加载表格视图内容)。 UIView 对象不是线程安全的,句号。

【讨论】:

感谢您的回复。我的意思是实际上想在 GCD 上的 UITableView 中下载一个缩略图,只要你不接触 UIKit,它就可以工作。只是好奇,但为什么 NSFetchedController 比将数据加载到数组中要好得多?你碰巧知道吗? NSFetchedResultsController 是一个核心数据控制器对象,它在核心数据数据库和表视图之类的东西之间进行调解。一旦您了解了如何使用 Core Data,就可以执行诸如添加自动过滤结果的搜索字段、只需单击标题即可按不同列对表视图进行排序等操作。

以上是关于可以在单独的线程中使用 NSFetchedResultsController 来加载 TableViewCells 吗?的主要内容,如果未能解决你的问题,请参考以下文章

在单独的线程中初始化 Ktor 可以吗?

Python:定时在单独的线程中调用的函数

Boost.Asio 是不是可以使用单独的线程进行读写?

是否可以在单独的线程中将 QObject 设置为 QML 上下文属性?

Java:如何使用 Executor 框架从 2 个单独的线程中打印奇数和偶数

如何将数据写入stdin以供等待stdin输入的单独线程使用?