나는 비동기 주위에서 머리를 쓰려고 노력하고있다. 파견, 다중 스레드 실행 루프 등 등NSURLRequest를 수행하고 dispatch_async를 사용하는 것과 반대되는 대의원에게 응답하는 것의 차이점은 무엇입니까?
의 차이는 무엇:
1) 주어진 방법에 NSURLRequest하고있는 NSURLConnection을 작성하고 실행할 필요하고 우리가 대리자 메서드 (didReceiveResponse, didReceiveData에 응답을 , connectionDidFinishLoading 등) 및
2) 블록을 만들고 dispatch_async가 있습니까?
첫 번째 방법을 사용하면 위임 메서드에 대한 액세스 권한이 있고 (해당 개체에 대한 액세스 권한이 여전히 있습니까?) 위임 메서드를 실행하면 실행될 수 있습니다.
블록/디스패치 메소드를 사용하면 해당 블록 내에서 블록이 동 기적으로 처리됩니다. 그런 다음 메인 스레드로 돌아와 결과를 처리합니까? 예제 코드 내가보고있는 코드 :
dispatch_async(kBgQueue, ^{
NSData* data = [NSData dataWithContentsOfURL:
kLatestKivaLoansURL];
[self performSelectorOnMainThread:@selector(fetchedData:)
withObject:data waitUntilDone:YES];
});
데이터를받은 후 "self performSelector ...."가 수행됩니까? (동기 이전에 내가 의미했던 것은 아마도 잘못된 용어 일 것입니다.) 그리고 블록의 다음 라인은 우리를 주 스레드로 되돌려 보냅니다.
"waitUntilDone : YES"의 용도 또는 이유는 무엇입니까? 그것은 거기에 없으면 다른 것들은 메인 스레드에서 일어날 수 없기 때문입니까?
위의 첫 번째 방법은 여전히 주 스레드에서만 수행됩니까?
마지막으로 웹 페이지에 대한 JSON 쿼리의 경우 장단점은 무엇입니까? 다른 방법보다 한 가지 방법의 큰 이점이 있습니까?
나는 오늘 밤에 이것을 배우고 이해하려고 노력하면서 나는 내가 더할 것이라고 생각했다. (사실, 더 많은) 탭이 열려있다. 대부분의 예제가 완전히 다르기 때문에 두 가지를 관련 지을 수 없었습니다. 또한, 나는 (테스트 목적을 위해) 내 애플 리케이션에서 두 가지 다른 방식으로 똑같은 일을하려고 노력 해왔다. 그러나 나는 계속 잘못 이해하고있다. "waitUntilDone"매개 변수와 관련하여, 그것은 블록의 마지막 동작이고 관련성이 없기 때문에 나에게는 매우 불투명 해 보입니다. 그러나 나는 단지 짐작하고있다. – Madivad