2012-06-07 7 views
1

코드에 몇 가지 문제가 있으며 속도 향상 방법을 모르고 있습니다.코드 실행 속도 향상

initialized = [[NSUserDefaults standardUserDefaults] boolForKey:@"initialized"]; 

if (!initialized) { 
    dispatch_queue_t queue = dispatch_get_global_queue(
                 DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 


    dispatch_async(queue, ^{ 
     [DAO setDocumentsCacheDirectory:[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]]; 

     ....download images and files needed by application 

     NSLog(@"%@", @"Finished downloadding images and files"); 

     [[NSNotificationCenter defaultCenter] postNotificationName:@"refreshView" object:nil]; 
     [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"initialized"]; 
    }); 
} 

이 비동기 다운로드 내가보기에 GIF 이미지를 회전 한 일이 일어나고 있지만 : 여기에 애플 대리자 (didFinishLaunchingWithOptions 방법 본체)에서 내 코드입니다. 이 다운로드가 모두 끝나면 볼 수 있듯이 refreshView 메소드가 내 View Controller에서 트리거됩니다.

로드가 완료되면 다시로드합니다. NSLog (@ "% @", @ "Finished reloading ..")가 있습니다. 그래서 언제보기가 다시로드되었는지 알 수 있습니다.

문제 :

그래서 내가 콘솔에서 찾고 있어요 :

2012-06-07 12:52:34.898 TestApp[29800:13c03] Finished downloadding images and files 
[Switching to process 29800 thread 0x13c03] 
2012-06-07 12:52:34.909 TestApp[29800:13c03] Finished reloading.. 

파일 다운로드는 두 번째 또는 두 개의 범위 내에서 실시 할 것으로 보인다. 그런 다음 즉시 타임 스탬프로 볼 수 있듯이보기 다시로드가 완료됩니다.

하지만 응용 프로그램이 5 초 정도 기다리는 동안 어디서 무슨 일이 벌어지고 있는지 그리고 그 다음에 만보기가 다시 새로 고쳐집니다. 메시지가 완료되면 다시로드되지만 약 5 초 전에 표시되었습니다.

다음에 무엇을 하시겠습니까?

답변

5

당신은 배경 큐에 알림을 게시하는 -는이 메인 큐에서 수행 될 필요가 다음 UI 업데이트를 트리거 어떤 경우 :

dispatch_async(queue, ^{ 
    [DAO setDocumentsCacheDirectory:[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]]; 

    ....download images and files needed by application 

    NSLog(@"%@", @"Finished downloadding images and files"); 

    dispatch_sync(dispatch_get_main_queue(), ^{ 
     [[NSNotificationCenter defaultCenter] postNotificationName:@"refreshView" object:nil]; 
    } 

    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"initialized"]; 
}); 

공지 사항 여기 dispatch_sync을 사용했습니다 .. NSUserDefaults은 기본 대기열 블록이 완료 될 때까지 업데이트되지 않습니다.

+0

w0w 우수 답변 저는 아직 기본 지식을 배우고있는 것 같아요. 기본적인 지식이 부족합니다. 감사합니다 – London

+0

'[[NSUserDefaults standardUserDefaults] setBool : YES forKey : @ "initialized"]; '이 부분이 올바른 위치에 있습니까? 또한 braquets 조금 보인다. – Peres