2

dispatch_asyncNSMutableURLRequest 요청을 넣었지만 작동하지 않습니다. 그러나 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] :

는이 메소드를 호출하기 전에 실행 루프에서 연결 또는 작업 큐를 예약하지 않으면 연결이에서 현재 실행 루프 예정이다 기본 모드.

백그라운드 스레드의 블록에서 비동기 메서드를 호출하면 불필요합니다. 주 스레드에서 async 메서드를 호출하거나 (즉시 반환하고 백그라운드에서 작업을 예약) 또는 비동기 전달 된 블록에서 동기 메서드를 호출해야합니다. 두 번째 방법을 사용하면 모든 대리자 콜백을 처리 할 필요가 없지만로드 작업을 일부 제어 할 수는 없습니다.