2013-03-10 2 views
2

내 응용 프로그램 대리인의 applicationDidBecomeActive:에서 사용자 로그인 상태의 유효성을 검사하고 실패하면 로그인 페이지를 표시합니다. 이 검사는 네트워크 호출을 포함하고 있으며 네트워크 상태가 좋지 않은 경우 기본 UI를 차단하여 앱을 효과적으로 중단시킬 수 있습니다.applicationDidBecomeActive가 메인 스레드를 차단합니까?

앱이 활성화되면 타이밍 관점에서 어떻게됩니까? 메인 스레드에서 applicationDidBecomeActive: 블록/실행 내용을 확인 하시겠습니까? 이 네트워크 호출을 비동기 적으로 수행해야합니까 (예 : GCD 사용)?

답변

8

applicationDidBecomeActive 메서드는 모든 UIKit 메서드와 마찬가지로 주 스레드에서 호출됩니다. 항상 백그라운드 스레드에서 장기간 실행되는 프로세스 또는 네트워킹 액세스를 수행해야합니다.

비동기 양식 NSURLConnection을 사용하거나 GCD를 사용하여 백그라운드 대기열에서 작업을 수행하십시오.

2

응용 프로그램 대리자 applicationDid... 메서드에서 동기 네트워크 작업을 수행하면 안됩니다 (프로그램에서 동기 네트워크 작업을해서는 안됩니다). iOS는 시작/백그라운드/이력서 이벤트에 응답하는 데 시간이 오래 걸리는 경우 앱을 종료합니다. 오류 로그에는 <Your app> failed to launch in time이 표시됩니다.