我有通过NSURLConnection
连接到服务器(发送请求)的应用程序,并从服务器接收一些数据。我希望在单独的线程中在后台发生这种情况。我已经看到NSOperation
用于此目的 - 如本教程所示 -
Concurrent Operations Demystified
但这是一个有点旧的教程(从2009年开始),也许有一些新方法可以做到这一点。基本上我想要做的是 - 启动NSOperation
,等待它接收数据(因为如果我没有线程将结束,数据将丢失)然后发出信号表明数据准备就绪(可能通过{{ 1}})
我发出的请求是异步的,所以我可以使用进度条等待数据。我可以在NSOperation块中调用哪些东西导致线程休眠直到收到数据?像某些循环等待满足某些条件?
答案 0 :(得分:3)
这个教程已经过时了,今天你可以更轻松地编写关于同一件事的代码。为您的请求创建NSOperationQueue
,并将NSOperationBlock
与同步NSURLConnection
结合使用以下载数据:
[queue addOperationWithBlock:^{
NSError *error = nil;
NSHTTPURLResponse *response = nil;
NSMutableURLRequest *request = /* build request */;
NSData *data = [NSURLConnection
sendSynchronousRequest:request
returningResponse:&response
error:&error];
/* handle errors and callbacks */
}];
队列允许您设置并发请求数量的限制,并且还支持免费取消(当然不在请求中)。
答案 1 :(得分:1)
如果您从网上获取数据,则可能需要使用Asihttprequest,它支持队列和同步/异步数据加载。
答案 2 :(得分:-1)
NSInvocationOperation *operation = [[NSInvocationOperation alloc]
initWithTarget:self
selector:@selector(Method)
object:nil];
[self.Queue addOperation:operation];