NSoperation如何使用它来等待事件?

时间:2012-07-19 06:46:54

标签: iphone ios nsurlconnection nsoperation

我有通过NSURLConnection连接到服务器(发送请求)的应用程序,并从服务器接收一些数据。我希望在单独的线程中在后台发生这种情况。我已经看到NSOperation用于此目的 - 如本教程所示 -

Concurrent Operations Demystified

但这是一个有点旧的教程(从2009年开始),也许有一些新方法可以做到这一点。基本上我想要做的是 - 启动NSOperation,等待它接收数据(因为如果我没有线程将结束,数据将丢失)然后发出信号表明数据准备就绪(可能通过{{ 1}})

我发出的请求是异步的,所以我可以使用进度条等待数据。我可以在NSOperation块中调用哪些东西导致线程休眠直到收到数据?像某些循环等待满足某些条件?

3 个答案:

答案 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];