我在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
?
谢谢!
答案 0 :(得分:2)
这并不是说你在一个地方而不是另一个地方使用可变连接,而是你正在调用立即在当前线程上运行的同步请求方法,而不是需要运行循环来运行的异步方法。来自 - [NSURLConnection start]的文档:
如果你没有安排 在调用它之前,在运行循环或操作队列中建立连接 方法,连接被安排在当前的运行循环中 默认模式。
从后台线程上的块调用异步方法是多余的。您应该在主线程上调用异步方法(它立即返回并在后台调度其工作)或在异步调度块中调用同步方法。从第二种方式来看,您不必处理所有委托回调,但是您放弃了对加载操作的一些控制。