繼續我的問題here,我有22個plist文件,我希望在啓動時加載。現在,它可以工作,但你可以想象發射速度非常緩慢。在應用程序啓動時將20多個plist文件加載到內存
我能做些什麼來儘量減少發射時間?
我可以使用NSOperationQueue加載每個單獨的線程嗎?我也讀過將plists轉換爲二進制文件將有所幫助。
繼續我的問題here,我有22個plist文件,我希望在啓動時加載。現在,它可以工作,但你可以想象發射速度非常緩慢。在應用程序啓動時將20多個plist文件加載到內存
我能做些什麼來儘量減少發射時間?
我可以使用NSOperationQueue加載每個單獨的線程嗎?我也讀過將plists轉換爲二進制文件將有所幫助。
您可以使用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將會在一個單獨的線程中一個接一個地執行每個塊。
您也可以嘗試使用'performSelectorInBackground:',因爲它非常易於使用。 – gurooj
你確定你需要立即所有22 plists?如何試圖加載他們懶惰? – Eimantas
是的, - 我確實需要他們。數據的響應速度是應用程序的關鍵。 – barfoon