我有一个在后台线程上调用的方法foo:
。此方法只是向服务器发送请求,并在检索数据后对这些数据执行一些计算并返回。在这种情况下,我更喜欢使用sendSynchronousRequest
:因为此方法很方便,并且线程是否被阻塞并不重要。但是,该响应包含一个“位置”标题字段,该字段将重定向到另一个页面。我想读取响应以在重定向之前获取这些“Set-Cookie”标题字段。看来,同步方法不允许我。如何在后台线程上执行异步请求?
我试图使用异步的并实现NSURLConnectionDataDelegate
,但线程完成之前调用委托的这些方法。 (我想苹果公司实现异步操作的方式是在新线程上执行那些耗时的工作)
有什么办法可以解决这个问题吗?由于在主线程上执行异步请求可能会增加我的程序的复杂性。
foo的:方法是一种像这样
- (Result *)foo
{
NSURLMutableRequest * request = blablabla;
//Do something to initialize the request
NSData *data = [NSURLConnection sendSynchronousRequest:request
returningResponse:&response
error:&error];
//Do something with the data
Result *result = [[Result alloc] init] autorelease];
//fill the result
return result;
}
不确定为什么您认为在主线程上执行异步请求可能会增加程序的复杂性。创建后台线程通常只有在您需要执行长时间或计算密集型任务时才有意义,因为线程很快完成,这似乎不是这种情况。 – 2013-04-11 07:45:38
正如你所提到的,foo方法是一个在计算密集型任务中调用的中间方法,我觉得它应该不在主线程中执行。 – Poligun 2013-04-11 08:22:37