2011-12-12 73 views
0

继续我的问题here,我有22个plist文件,我希望在启动时加载。现在,它可以工作,但你可以想象发射速度非常缓慢。在应用程序启动时将20多个plist文件加载到内存

我能做些什么来尽量减少发射时间?

我可以使用NSOperationQueue加载每个单独的线程吗?我也读过将plists转换为二进制文件将有所帮助。

+2

你确定你需要立即所有22 plists?如何试图加载他们懒惰? – 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

相关问题