我有一个大的plist文件,我有问题,当我这样做:
[NSMutableDictionary dictionaryWithContentsOfFile:docDirPath];
我必须等待几秒才能使用该应用程序。有一些解决方案吗?
由于
答案 0 :(得分: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读取完成之前不会生效,则需要将块中的块包装到堆中。
dispatch_async(queue, [[^{ [self.theDictionary = [NSMutableDictionary dictionaryWithContentsOfFile:docDirPath]; } copy] autorelease]);
答案 1 :(得分:2)
如果plist存储为文本plist,请将其转换为二进制plist。它们加载速度更快。
最简单的方法是使用plutil:
plutil -convert binary1 file.plist
(这假设它是一个静态plist文件而不是动态创建的文件。在你的应用程序中,你可以使用NSPropertyListSerialization将字典存储为二进制文件)