我有一个很大的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