2011-11-20 6 views
5

첫 번째 실행시 일부 데이터에 액세스하는 앱을 만든 다음 표시합니다. 이 방법으로이 데이터를 다운로드했습니다.앱을 시작할 때 dataWithContentsOfURL이 불량합니까?

NSData *data = [NSData dataWithContentsOfURL:url]; 

이것이 나쁘습니까? 지금은 GCD를 사용하는 백그라운드 스레드에서 실행되는이 메서드를 설정했지만 dataWithContentsOfURL은 동기식이라고 들었습니다. 이것에 대한 의견이 있습니까?

+0

@bryanmac Apple GCD 관련 질문에 grand-central-dispatch 태그를 사용하십시오. –

답변

5

메인 UI 스레드에서 실행하면 좋지 않습니다. 앱의 반응이 좋지 않지만 시작시 더 나빠질 수 있습니다.

비동기로 만들어야합니다. 해당 메서드를 백그라운드 스레드 (GCD dispatch_async)에서 실행하거나 NSUrlConnection의 비동기 메서드를 사용하여 수행 할 수 있습니다.

는 다음 주 스레드에서 (후 완료) UI를 백그라운드에서 작동하고 업데이트 할 GCD를 사용하는 예이다 :

GCD, Threads, Program Flow and UI Updating

또 다른 옵션은있는 NSURLConnection의 비동기 방식입니다. 여기에 initWithRequest 방법을 참조하십시오 : 당신이 백그라운드 스레드에서 실행하고 같이 긴 안전있어

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSURLConnection_Class/Reference/Reference.html

+0

GDC를 사용하여 백그라운드 스레드에서 실행하면 문제가 될 수 있습니까? – Yep

+0

이 방금 편집되었습니다. GCD로 실행할 수 있습니다. 포인터 몇 개를 추가하겠습니다. – bryanmac

+1

나는 이렇게했다 :'dispatch_async (dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),^{ // do something }); ' – Yep

3

.
동기 로딩이 좋지 않다는 생각은 기본 UI 스레드에만 유효합니다. 기본 UI 스레드에서 장기간 실행하면 앱이 응답하지 않게됩니다. 백그라운드에서 실행하는 것이 올바른 방법입니다. 또한 다음을 사용하는 것이 좋습니다.

+dataWithContentsOfURL:options:error: 

아무 것도 잘못되면 오류가 발생할 수 있습니다.

관련 문제