2014-06-13 2 views
0

30 개의 이미지가 포함 된 NSDictionary를 저장하려고합니다. 내 ViewController의 viewDidDisappear에 사전을 저장하는 메서드를 호출하고 있습니다. 문제는 저장하는 동안 UI가 멈추는 것입니다. 그것은 1 초도 채 안되는 작은 지체이지만 약간 성가시다. 좀 더 유동적으로 만들 수있는 아이디어가 있습니까? 어쩌면 블록을 비동기 적으로 저장해야 할지도 모르지만 블록을 사용하는 방법을 잘 모릅니다.이미지를 저장하는 중 UI가 멈춤

여기 내 절약 등이 점점 방법 :

+ (NSDictionary*)getProgramImages{ 
    NSString *path = [DataManager getProgramImagesFileDirectory]; 
    NSDictionary *programImages = [NSKeyedUnarchiver unarchiveObjectWithFile:path]; 

    return programImages; 
} 

+ (void)saveProgramImages:(NSDictionary*)programImages{ 
    NSString *path = [DataManager getProgramImagesFileDirectory]; 

    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:programImages]; 
    [data writeToFile:path options:NSDataWritingAtomic error:nil]; 
} 

도와 주셔서 감사합니다 많이!

보리스

+0

주 스레드에서 저장 함수를 호출하면 UI가 너무 무거워지는 문제가 있습니다. 스레드에 대한 자세한 내용은 https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Multithreading/CreatingThreads/CreatingThreads.html을 참조하십시오. – Milo

답변

1

아래 코드를 사용하여 함수 호출을 래핑 할 수 있습니다.이 코드는 Grand Central Dispatch를 사용하여 백그라운드 스레드에서 해당 코드를 실행합니다. 문제가 해결 될 수 있는지 여부를 즉시 확인할 수 없습니다.

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
    // call that function inside here 
}); 
1

아마 dispatch_async 당신이 메인 스레드에서 실행되는 코드를 부드럽게하는 데 도움 수 있습니다.

dispatch_async(dispatch_get_main_queue(),^{ 
     //your code goes here 
    }); 
1

다양한 방법으로 문제를 해결할 수 있습니다. 이것을 읽어야합니다. Concurrency Programming

Grand Central Dispatch는 좋은 선택입니다.