2

我把NSMutableURLRequest請求dispatch_async,但它不工作。然而,NSURLRequest的作品。代碼:NSMutableURLRequest和NSURLConnection無法在GCD dispatch_async中工作?

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! 
}); 

NSMutableURLRequestNSURLRequest之間有什麼區別?或者,我以錯誤的方式使用NSURLConnection

謝謝!

回答

2

這並不是說你用在一個地方一個可變的連接,而不是其他,那就是我們在調用它立即運行當前線程與它需要一個運行循環運行異步方法的同步請求方法。從文檔 - [NSURLConnection的開始]:

如果不安排調用此方法 之前的運行循環的 連接或操作隊列,連接定在當前運行的循環 默認模式。

從後臺線程上的塊調用異步方法是多餘的。您應該在主線程上調用異步方法(它會立即返回並在後臺調度其工作),或者在異步調度的塊中調用同步方法。以第二種方式進行操作,您不必處理所有委託回調,但您放棄了對加載操作的一些控制。