领域在后台线程上获取对象并传递给主线程

Pet*_*isu 10 multithreading cocoa-touch objective-c realm ios

我想在后台线程上获取大量对象,但是我无法将它们传递给主线程,就像我得到的那样

*** Terminating app due to uncaught exception 'RLMException', reason: 'Realm accessed from incorrect thread'
Run Code Online (Sandbox Code Playgroud)

获取代码

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){

    //Background Thread
    RLMRealm * realm = [RLMRealm defaultRealm];
    self.allObjectsRLMResult = [MyClass allObjectsInRealm:realm];

    dispatch_async(dispatch_get_main_queue(), ^(void){

        // use self.allObjects and do stuff on main thread

    });

});
Run Code Online (Sandbox Code Playgroud)

如何在后台执行提取并将对象传递给主线程,因此对性能影响最小

我可以获得主键,然后在主线程上重新获取,但这将是相同的性能(可能甚至更慢)直接获取它们

yos*_*osh 6

来自Realm的乔在这里.目前你所描述的(获得主键)是最好的方法.我们已经意识到这一点并且一直在研究线程切换解决方案,但是现在这将是获取对象的最佳方式.