2012-11-13 5 views
1

내 애플 리케이션에서 나는 여러 가지 방법을 수행하고있다. 모두 다른 스레드에 있으며, 요청에서 데이터를 다운로드하고, 구문 분석하고 배열에 추가한다. 이러한 방법의 대부분은 한 요청에서 데이터를 다운로드하지만이 방법에서는 for 루프를 사용하고 30 개 이상의 번역을 다운로드합니다.-sendSynchronousRequest를 더 빠르게 만드는 방법은 무엇입니까?

그러나 이것은 사용자 경험이 좋지 않아 사용자가 회전 바퀴를보고 임의로 생성 된 실속 텍스트를 읽어야합니다.

내가 알고 싶은 것은 동기식 요청 (NSURLConnection)을 어떻게하면 가장 좋은 방법으로 만들 수 있는가? 너무 많은 요청을 한 이후로 즉시 비동기로 전환해야합니까? 비동기는 무엇을 의미합니까?이 시나리오에서 도움이 될까요?

모든 것을 마무리하기 위해, 응용 프로그램 (그러나 최악의 대역폭, 싱가포르에서!) 3G에 와이파이 7 초 느린 30 초까지 걸릴 수 있습니다

그럼, 어떻게 개선하기 위해? 어떤 방법, 기술, API의, 제발 도와주세요!

감사합니다.

답변

3

속도는 동기 대 비동기를 사용하여 어떤 식 으로든 영향을받지 않습니다. 인터넷 속도도 마찬가지입니다.

문제는 주 스레드에서 동기 네트워킹 호출을해서는 안됩니다. 그렇게하면 사용자 인터페이스가 잠 깁니다. 가장 좋은 경우는 앱이 사용자에게 갇혀있는 것입니다 (불량). 최악의 경우, OS가 응답하지 않는 (나쁜) 것에 대해 앱을 죽입니다.

모든 네트워킹은 백그라운드에서 수행되어야합니다.

모든 네트워크 액세스가 완료 될 때까지 앱을 실제로 진행할 수없는 경우 사용자에게 무슨 일이 일어나는지 알려주는 '바쁜'화면을 올려 놓을 수 있습니다. 아마도 진행률 표시 줄을 사용하여 프로세스 진행 정도를 알리거나 파일 수에 대한 "x"y 수를 표시 할 수 있습니다. 앱에 적합한 것은 무엇입니까?

하지만 다시 네트워크 액세스 속도는 변경되지 않습니다. 더 나은 사용자 경험을 제공 할 것입니다.

비동기 파일 다운로드를 수행하는 방법에 대한 많은 질문이 있습니다. 많은 사람들이 NSURLConnection을 사용하고 있으며 타인 라이브러리를 사용하는 다른 사용자는 자신이하는 일에 따라 더 쉽게 만들 수 있습니다. 조금만 둘러보세요. 몇몇은 이것에 관련 질문으로 열거되다.

+0

좋아, 고마워, 나는 내 질문에 내가 다른 스레드에서 모두 메인 therad에서 동기를하지 말라고 말했다. 술집과 함께 가라. 내 최고의 선택이 될거야. – MCKapur

3

이 문제를 해결하는 가장 좋은 방법은 비동기 호출입니다. 속도를 초월하여 가능할 때마다 동기식 요청을 사용하지 않아야합니다. 기본적으로 동기식을 사용하지만 별도의 스레드에서 작업하는 경우 비동기식으로 이미 수행됩니다. 설정하는 데 더 많은 시간이 걸리지 만 동시에 모든 동기식 요청을 전송할 수 있으며 서로 다른 시간에 완료 할 수 있습니다. 동시에 진행할 수있는 HTTP 요청의 수에는 제한이 있지만 iOS는이를 제한하며 대규모 성능 향상을보아야합니다.

+0

그래서 별도의 스레드에 동기화를 설정하면 기본적으로 기본 스레드의 비동기와 동일한 속도가됩니까? – MCKapur

+1

내가 아는 한 그렇지만 사과가 어떻게 처리하는지 잘 모르겠습니다. 나는 그것이 일할 것이라고 상상할 것이다. 그러나 그것은 추천되지 않을 것이다. asych 호출을 사용하여 코드를 다시 작성하지 않으려 고합니다.하지만 지금은 시간을내어 사용하는 것이 좋습니다. 그다지 어렵지 않고 훨씬 더 우아하게 처리 할 수 ​​있고 아마도 더 나은 오류 처리를 할 수 있습니다. – rooster117

관련 문제