我有一個在後臺線程上調用的方法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