동기식 NSUrlConnection과 NSynchronous NSUrlConnection의 차이점은 무엇입니까? 동기식 또는 비동기식입니까? connectionDidFinishLoading 메서드에서 detachNewThreadSelector를 사용하는 경우 비동기 NSUrlConnection입니까? 가장 좋은 방법은 무엇입니까? 튜토리얼 ...정확하게 NSUrlConnection 비동기 란 무엇을 의미합니까?
답변
동기는 사용자가 NSURLConnection
요청을 트리거하고 완료 될 때까지 기다리는 것을 의미합니다.
비동기 란 NSURLConnection
데이터를 다운로드하는 동안 요청을 실행하고 다른 작업을 수행 할 수 있음을 의미합니다.
어떤 것이 "최상"입니까?
동기식은 매우 간단합니다. 설정하고 실행하고 데이터가 돌아 오기를 기다립니다. 그러나 애플리케이션이 거기에 앉아서 모든 데이터가 다운로드되거나 오류가 발생하거나 요청 시간이 초과 될 때까지 아무것도하지 않습니다. 적은 양의 데이터를 처리하는 경우 사용자가 대기 상태에 머물러있어 사용자 만족도가 떨어집니다.
비동기는 작업이 조금 더 필요하지만 사용자가 요청을 처리하는 동안 다른 작업을 수행 할 수 있습니다. 이는 일반적으로 바람직합니다. 들어오는대로 데이터를 추적 할 수있는 일부 대리자 메서드를 설정하면 다운로드 진행률을 추적하는 데 유용합니다. 대부분의 사용 사례에서는이 방법이 더 좋습니다.
NSURLConnection
으로 동기 및 비동기 요청을 모두 수행 할 수 있습니다. Apple의 documentation은 후자의 접근 방법에 필요한 두 가지 접근 방법과 대표 방법을 명확하게 설명합니다.
동기식/비동기식 연결과 스레딩이 서로 충돌하는 것 같습니다. 내 응용 프로그램에서 스레드 대신에 비동기 연결을 사용했습니다.
UI가 정지하지 않고 큰 파일을 다운로드하려고한다고 가정 해 봅니다. 두 가지 기본 옵션이 있습니다.
비동기 연결.
+ connectionWithRequest:delegate:
(또는 다른 autorelease 옵션이 아닌)으로 시작하고 흥미로운 일이 발생할 때 위임자에게 전화하면서 파일의 비트를 다운로드합니다. runloop이 계속 진행 중이므로 UI가 반응 형으로 유지됩니다. 물론 위임자가 범위를 벗어나지 않도록 조심해야합니다.동기입니다.
+ sendSynchronousRequest:returningResponse:error:
으로 연결을 시작했지만 다운로드가 완료 될 때까지 코드가 대기합니다. 새로운 스레드 (또는 Cocoa가 지원하는 상위 레벨 스레딩 작업 중 하나)를 생성하거나 UI가 차단해야합니다.
"최선"또는 가장 고통스러운 옵션은 응용 프로그램의 아키텍처와 달성하려는 대상에 따라 다릅니다. 어쨌든 장기 실행 프로세스에 대한 스레드를 작성해야하는 경우 두 번째 옵션을 사용할 수 있습니다. 일반적으로 나는 첫 번째 옵션이 가장 쉽다고 말합니다.
모두 괜찮습니다. documented on Apple's Developer site.
다른 응답에서 언급되지 않은 내용은 요청의 크기입니다. 예를 들어 큰 파일을 다운로드하는 경우 비동기 연결을 사용하는 것이 좋습니다. 대리인은 도착하는대로 데이터 블록을받습니다. 비교해 보면 동기식 메서드는 모든 데이터를 사용하기 전에 대기합니다.대리인은 응답 처리 속도가 빨라지고 (사용자 환경이 개선됨) 메모리 대신 파일 (리소스 사용률이 더 높음)에 저장되도록 저장할 수 있습니다. 또한 모든 데이터를 기다리지 않고 응답을 중지 할 수있는 옵션이 있습니다.
기본적으로 비동기 방법을 사용하면 연결을 제어 할 수 있지만 복잡성을 피할 수 있습니다. 동기식 메서드는 훨씬 간단하지만 주 UI 스레드에서 차단해야하므로이를 사용하면 안됩니다.
파일 크기와 관련하여 다른 답변에 대한 답변 : 파일 크기가 중요하지 않다고 생각합니다. 서버가 매우 느리게 응답하고 데이터를 동기화하는 경우 3k와 같이 소량의 데이터를로드하더라도 UI는 여전히 정지됩니다.
모든 상황에서 비동기식 옵션을 사용하면 파일 크기, 서버 응답 속도 또는 네트워크 속도와 관련하여 어떤 결과를 얻을지 모를 수 있습니다.
- 1. 벡터화 란 무엇을 의미합니까?
- 2. "벌크로드"란 무엇을 의미합니까?
- 3. 이벤트 란 무엇을 의미합니까?
- 4. 참조 란 무엇을 의미합니까?
- 5. "headless"란 무엇을 의미합니까?
- 6. 비동기 ORM은 무엇을 의미합니까
- 7. 팀 플레이어 란 무엇을 의미합니까?
- 8. "데이터 마사지"란 무엇을 의미합니까?
- 9. 공공 보호 란 무엇을 의미합니까?
- 10. 데몬 스레드 란 무엇을 의미합니까?
- 11. "누울 스크립트"란 무엇을 의미합니까?
- 12. 레거시 데이터베이스 란 용어는 무엇을 의미합니까?
- 13. 이 OpenFeint 개발자 경고 란 무엇을 의미합니까?
- 14. Tortoise SVN changelog에서 "바꾸기"란 무엇을 의미합니까?
- 15. 단위 테스트 MVC보기 란 무엇을 의미합니까?
- 16. iphone 비동기 NSURLConnection 취소
- 17. SGBD는 무엇을 의미합니까?
- 18. Java : + = 무엇을 의미합니까?
- 19. 무엇을 의미합니까?
- 20. 개체를 복제하는 것은 무엇을 의미합니까?
- 21. NSURLConnection 비동기 연결에서 데이터가 깨졌습니다.
- 22. "죽은 쇠고기"는 무엇을 의미합니까?
- 23. git push -u는 무엇을 의미합니까?
- 24. VisualStudio Dataset visualizer 외설 표시 란 무엇을 의미합니까?
- 25. ^L (Emacs Lisp) 소스 코드 란 무엇을 의미합니까?
- 26. Func <someType, someType = ""> - 등호 란 무엇을 의미합니까?
- 27. 노드를 확장한다는 것은 무엇을 의미합니까?
- 28. ASP.net 버전 2.0은 무엇을 의미합니까?
- 29. 구조체에 ID가없는 것은 무엇을 의미합니까?
- 30. Ajax에서 비동기 란 무엇입니까?
어떻게 연결이 동기식 또는 비동기식으로 사용되는지 식별 할 수 있습니까? 다음 예제를 볼 경우 http://developer.apple.com/iphone/library/samplecode/SeismicXML/ 사용법을 알려주시겠습니까? 만약 connectionWithRequest : delegate : 비동기를 참조합니다. sendSynchronousRequest : returningResponse : error : synchronous를 참조합니다. 어떤 예는 NSUrl 연결을 사용하지 않았습니다. –