2011-12-12 3 views
0

내 질문에 대한 답변을 here에 올리면 실행시로드 할 plist 파일이 22 개 있습니다. 지금은 작동하지만, 당신이 상상할 수 있듯이 발사는 매우 느립니다.앱 실행시 메모리에 20 개 이상의 plist 파일로드

출시 시간을 최소화하려면 어떻게해야합니까?

NSOperationQueue를 사용하여 각각 별도의 스레드로로드 할 수 있습니까? 나는 plists를 바이너리로 변환하는 것이 도움이 될 것이라고 읽었습니다.

+2

즉시 22 개가 모두 필요합니까? 느슨하게 그들을로드하는 방법에 대해? – Eimantas

+0

예 - 모든 것을 즉시 필요로합니다. 데이터의 응답 성은 앱의 핵심입니다. – barfoon

답변

4

NSOperationQueue, performSelectorInBackground 또는 Grand Central Dispatch를 사용할 수 있습니다 (나중에 사용법을 알고 나면 매우 자주 사용하므로 매우 쉽게 사용할 수 있습니다). 요점은 단순히 메인 스레드에로드하지 않고 하나씩로드하는 것입니다 (각 스레드를 동시에로드하면 각 스레드의 성능이 좋지 않을 수도 있음). 로드가 완료되면 주 스레드에서 메소드를 호출하여 결과를 지정하십시오. 예를 들어

:

yourQueue = dispatch_queue_create("plist load queue", NULL); 

for (filename in plistFilesToLoad) { 
    dispatch_async(yourQueue, ^{ 
     // This part will be executed in a thread, 
     // each block after the other. 
     NSDictionary *dict = [self loadPlist:filename]; 

     dispatch_async(dispatch_get_main_queue(), ^{ 
      // Assign the result on the main thread. 
      [self finishedLoading:filename withDictionary:dict]; 
     }); 
    }); 
} 

dispatch_async 통화를 신속하게 돌아올 때문에 루프 자체가 빠르게 실행됩니다. 그러나 GCD는 각 블록을 차례로 하나씩 실행합니다.

+0

사용하기 쉽기 때문에'performSelectorInBackground :'를 사용해 볼 수도 있습니다. – gurooj

관련 문제