1

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

并发操作揭秘

但这是一个有点旧的教程(从 2009 年开始),也许找到了一些新的方法来做到这一点。基本上我想要做的是 - 开始NSOperation,等待它接收数据(因为如果我不线程将结束,数据将丢失)然后发出数据准备好的信号(也许通过NSNotificationCentre

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

4

3 回答 3

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 */
}];

队列允许您设置并发请求数量的限制,并且还支持免费取消(但不在请求内,当然)。

于 2012-07-19T06:57:31.643 回答
1

如果您从 Web 获取数据,您可能需要使用Asihttprequest,它支持队列和同步/异步数据加载。

于 2012-07-19T06:54:26.203 回答
-1
NSInvocationOperation *operation = [[NSInvocationOperation alloc]
     initWithTarget:self
     selector:@selector(Method)
     object:nil];
[self.Queue addOperation:operation];
于 2012-07-19T07:14:08.040 回答