2011-09-30 50 views
2

我有一個很大的plist文件,我有一個問題,當我做:加載一個大的plist文件

[NSMutableDictionary dictionaryWithContentsOfFile:docDirPath]; 

我必須等待幾秒鐘之前,我可以使用該應用程序。有一些解決方案嗎?

謝謝

+2

將其加載到後臺線程中,因此它不會阻止UI – Eimantas

+0

有同樣的問題,所以我最終將PLIST拆分爲多個邏輯文件,並加載爲需要。我正在考慮使用CoreData進行重新分解。 –

+0

謝謝Eimantas我正在嘗試它! – Andrea

回答

2

加載plist在另一個線程,GCD是完美的。

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 
dispatch_async(queue, ^{ [self.theDictionary = [NSMutableDictionary dictionaryWithContentsOfFile:docDirPath]; }); 

如果在plist讀取完成之前這樣做的方法的類將不會生存,則需要將該塊複製到Heap中。

dispatch_async(queue, [[^{ [self.theDictionary = [NSMutableDictionary dictionaryWithContentsOfFile:docDirPath]; } copy] autorelease]); 
+0

我有這個警告:實例方法dictionarywithcontenentoffile:找不到 – Andrea

+1

我複製了你的電話只是爲了顯示使用GCD。只需將您在其他地方使用的代碼封裝起來即可。 – zaph

2

如果將plist存儲爲文本plist,請將其轉換爲二進制plist。它們的加載速度更快。

做到這一點的最簡單的方法是用plutil:

plutil -convert binary1 file.plist

(假設它是一個靜態的plist文件,而不是一個建立在-the-在您的應用程序中,您可以使用NSPropertyListSerialization將二進制字典存儲爲二進制文件)