2011-12-12 58 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

相關問題