비동기 요청은 실행 루프에서 예약되고 실행 루프 소스로 설정되어 네트워크에서 수신 된 데이터가있는 경우에만 자동으로 코드를 트리거합니다 (소켓 소스와 동일).
NSThread
에서 실행되는 동기 요청은 들어오는 데이터를 모니터하기 위해 스레드를 독점합니다. 일반적으로 상당히 과도합니다.
cancel
메서드를 사용하여 비동기 적으로 실행 한 경우에도 항상 NSURLConnection
을 취소 할 수 있습니다.
나는 그것이 NSURLConnection
가 예정된 때와 같은 방식으로 작동되도록 후드와 dispatch_source_create
, 또는 이와 유사한에서 GCD를 사용하는 NSOperationQueue
(+sendAsynchronousRequest:queue:completionHandler:
)에 비동기 요청을 보낼 수있는 새로운 API를 사용하여 내기 반복 스레드를 사용하지 않고 (스레드가 악의적 인 이유와 사용량을 최소화해야한다고 설명하는 WWDC'12 비디오보기), 위임을 사용하는 대신 블록을 완료 할 때 알림을 사용할 수 있다는 점만 다릅니다 기구.
몇 년 전에 비동기 호출을 임베드하고 관리를 훌륭한 블록 API (내 github의 OHURLLoader 참조)에 포함시키는 클래스를 만들었습니다. 사용하기가 더 쉬워졌습니다. NSOperationQueue
을 사용하는 새로운 API는 runloop에서 여전히 비동기 요청을 수행하면서도 위임을 구현하는 대신 블록을 사용할 수 있다는 동일한 원칙을 사용합니다.
감사합니다. 요점이 있습니다. – msk
의미가 있습니다. 새로운 블록 기반 접근 방식은 무엇입니까? 구체적으로 알려주십시오. 코드를 찾지 않고 Google에 문의해야 할 대상이 있으므로 일부 문서를 구할 수 있습니다. – Madbreaks
@Madbreaks는 NSURLConnection + sendAsynchronousRequest : queue : completionHandler :'입니다. – Tommy