NSFetchedResultsController在后台线程上执行

Flo*_*lke 9 core-data grand-central-dispatch

我必须NSFetchedResultsController在后台线程上执行fetch .

我目前的解决方案结构如下:

dispatch_queue_t fetchQueue = dispatch_queue_create("backgroundfetching", NULL);

dispatch_async(fetchQueue,^{
    // 1. Create NSManagedObjectContext
    // 2. Create NSFetchRequest
    // 3. Create NSFetchedResultsController
    // 4. PerformFetch

    dispatch_async(dispatch_get_main_queue(),^{
        [[self table] reloadData];
    });
});

dispatch_release(fetchQueue);
Run Code Online (Sandbox Code Playgroud)

我的第一次测试运行良好,但这是适当的方式吗?

Tec*_*Zen 5

由于获取的结果控制器旨在控制定义表视图的数据,因此它属于运行UI的前台线程/操作.把它放在后台线程上是没有意义的,因为你会失去首先使用它的所有优点.

我还担心跨异步线程发送FRC委托消息的影响.我不确定会有多可靠.

说了这么多,你的实现草图看起来很好.