我有一個很大的plist文件,我有一個問題,當我做:加載一個大的plist文件
[NSMutableDictionary dictionaryWithContentsOfFile:docDirPath];
我必須等待幾秒鐘之前,我可以使用該應用程序。有一些解決方案嗎?
謝謝
我有一個很大的plist文件,我有一個問題,當我做:加載一個大的plist文件
[NSMutableDictionary dictionaryWithContentsOfFile:docDirPath];
我必須等待幾秒鐘之前,我可以使用該應用程序。有一些解決方案嗎?
謝謝
加載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]);
如果將plist存儲爲文本plist,請將其轉換爲二進制plist。它們的加載速度更快。
做到這一點的最簡單的方法是用plutil:
plutil -convert binary1 file.plist
(假設它是一個靜態的plist文件,而不是一個建立在-the-在您的應用程序中,您可以使用NSPropertyListSerialization將二進制字典存儲爲二進制文件)
將其加載到後臺線程中,因此它不會阻止UI – Eimantas
有同樣的問題,所以我最終將PLIST拆分爲多個邏輯文件,並加載爲需要。我正在考慮使用CoreData進行重新分解。 –
謝謝Eimantas我正在嘗試它! – Andrea