2013-06-06 5 views
0

내 Mac 앱이 연결 및 데이터 가져 오기에 약 10 초가 소요되는 원격 데이터베이스에 연결됩니다. 이 시간은 프레임 워크 초기화 및 네트워크 대기 시간 등으로 인해 단축 될 수 없습니다.코코아 앱 부팅 스플래시 화면

초기 앱 실행 시간부터 시작하여 앱 준비가 완료 될 때까지 스플래시 화면을 넣으려는 경우입니다.

나는 applicationWillFinishLaunching:(NSNotification *)notification 메서드를 시도했지만 응용 프로그램이 올라올 때까지 스플래시 화면을 표시하지 않습니다. 이는 AppDelegate가 마지막으로 생성 된 것으로 보이고 App 컨트롤러가 전체 응용 프로그램 전에 완전히 초기화됩니다. 지연이있는 곳인 "발사 마무리".

독 타일이 튀는 것을 시작하자마자이 창을 호출 할 수있는 방법이 있습니까?

나는 최적화를 위해 격추 될 것이라는 것을 알고 있지만,이 프로세스를 빠르게하기 위해 더 이상의 조치를 취할 수는 없습니다.

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul); 

    dispatch_async(queue, ^{ 
     // time consuming task 
    }); 

UPDATE :

당신이 dispatch_get_main_queue를 호출 할 수 있습니다에) (응용 프로그램 위양이 이동할 수 있도록

+0

이 시간 소모적 인 초기화 프로세스의 호출을 'applicationDidFinisLaunchingWithOptions'로 옮길 수 없습니까? 그때 당신은 먼저 스플래시 화면이나 모든 종류의 진행률 막대가 들어있는 모달보기를 표시 한 다음 초기화 프로세스를 시작할 수 있습니다. 이렇게함으로써 총 초기화 시간은 적어도 크게는 변하지 않아야하지만, 사용자가 훨씬 빠르게 시작하고 그의 진행은 진행 표시 줄 (또는 회 전자 또는 기타)에 의해 충족됩니다. –

+0

@HermannKlecker 시도해 볼 수는 있지만 AppDelegate를 사용하여이 메서드를 계속 사용할 수 있습니다. '느린 호출'은 데이터를 app 컨트롤러가 소유 한 배열에 넣는 모델 객체에 포함되어 있습니다. – Steve

+1

더 나은 방법은 UI를 표시하고 연결이 필요한 UI 요소를 비활성화하고 진행 표시기 및 메시징을 표시하는 것입니다. uchuugaka가 – uchuugaka

답변

3

어쩌면 당신은 비동기 적으로 GCD와 배경 스레드로 작업 소요 시간을 파견 할 수 UI 변경 사항이있는 경우 백그라운드 스레드와 달리 주 스레드에서 번거로운 작업을 수행하십시오.

+0

귀하의 의견을 보내 주셔서 감사합니다.이 응용 프로그램은 iOS가 아닌 OS X 용이므로, 귀하의 제안이 iOS에만 적용되는 것으로 오해하지 않는 한. – Steve

+0

죄송합니다. 대답을 편집 할 것입니다 – HermioneGreen

+0

좋은 생각이지만 데이터 가져 오기가 이미 다른 스레드에서 실행 중입니다. '데이터 객체'는 UI의 바인딩을 통해 액세스 할 때 주 스레드에서 실행됩니다. – Steve