![](/img/trans.png)
[英]What I should use for parallelisation of frequent HTTP requests to the REST server in iOS application: GCD or 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.