加载大Plist文件

时间:2011-09-30 20:19:42

标签: objective-c

我有一个大的plist文件,我有问题,当我这样做:

 [NSMutableDictionary dictionaryWithContentsOfFile:docDirPath];

我必须等待几秒才能使用该应用程序。有一些解决方案吗?

由于

2 个答案:

答案 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将字典存储为二进制文件)