繁体   English   中英

iOS-将数据发送到NSOperation还是应该使用NSThread?

[英]ios - sending data to NSOperation or should I use NSThread?

我有通过HTTP创建/更新的核心数据对象。 我还想创建一个后台线程,以不断从应用程序接收时间戳和状态信息,并更新核心数据对象。 我应该为此使用NSOperation或GCD吗? 由于这不仅是一项简单的任务,因此NSOperation似乎更好,因为我可以在其中进行循环,但是我无法弄清楚如何在运行时将信息从主线程传递到操作中。 有一个简单的方法吗? 我已经看到许多关于从操作向主线程发送消息的线程/文章,但是没有关于向其传递消息的文章。

使用NSOperation / GCD似乎是一个好的解决方案吗?

退后一步,回顾一下您的体系结构。 您应该使用本身使用专用调度队列(选项NSPrivateQueueConcurrencyType)的托管对象上下文。

然后,您将使用NSURLConnections来获取所需的数据,并在委托方法中获取数据时,可以使用performBlock异步更新存储库。

相反,您可能希望使用performBlockAndWait检索数据,使用块变量或可变的预定义对象从块中接收结果。

我一直在看这一切错误(本质上是想继承NSThread并将数据传递给它/从中传递数据)。 我没有考虑适当地使用块。

本质上,我正在做的是:

loadStuff:(NSDictionary *)stuff {
    // stuff is data from HTTP GET request
    NSManagedObjectContext *context = // init context with NSPrivateQueueConcurrencyType
    context.parentContext = // main context
    [context performBlock:^{
        // insert/update entities
        // save context
    }];
}

但是然后我需要循环一个后台线程来更新实体:

//inside some method
dispatch_async(global_queue, ^{
    // _currentTimestamp is updated by a delegate
    NSInterval timestamp = _currentTimestamp;
    while (run) {
        if (timestamp != _currentTimestamp) {
            // do calculation
            // update entities if needed
            // save context
        }
    }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM