2

我提出了一个NSMutableURLRequest请求,dispatch_async但它不起作用。但是,NSURLRequest有效。代码:

dispatch_queue_t queue1 = dispatch_get_global_queue(0, 0);
dispatch_async(queue1, ^{

    NSMutableURLRequest* request  = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://google.com"]];
    [request setHTTPMethod:@"GET"];
    NSURLConnection* connection = [NSURLConnection connectionWithRequest:request delegate:nil];
    [connection start];//It doesn't work!

    //***
    NSURLRequest *theRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://google.com"]];
    NSURLResponse* theResponse = nil;
    NSError* theError = nil;
    NSData* data = [NSURLConnection sendSynchronousRequest:theRequest
                                         returningResponse:&theResponse 
                                                     error:&theError];
    //This works great!
});

NSMutableURLRequest和有什么区别NSURLRequest吗?或者,我NSURLConnection以错误的方式使用?

谢谢!

4

1 回答 1

2

这并不是说您在一个地方而不是另一个地方使用可变连接,而是您正在调用立即在当前线程上运行的同步请求方法,而不是需要运行循环来操作的异步方法。从 -[NSURLConnection start] 的文档中:

如果在调用该方法之前没有将连接调度到运行循环或操作队列中,则默认模式下将连接调度到当前运行循环中。

从后台线程上的块调用异步方法是多余的。您应该在主线程上调用异步方法(它立即返回并在后台安排其工作)或在异步调度块中调用同步方法。第二种方式,你不必处理所有的委托回调,但你放弃了对加载操作的一些控制。

于 2012-03-02T04:28:44.857 回答