在应用启动时将20多个plist文件加载到内存中

时间:2011-12-12 17:36:25

标签: ios objective-c iphone plist

跟进我的问题here,我有22个plist文件,我想在发布时加载。现在,它有效,但你可以想象发射很慢。

我可以做些什么来最大限度地缩短发布时间?

我可以使用NSOperationQueue在单独的线程中加载每个吗?我还读到将plists转换为二进制文件会有所帮助。

1 个答案:

答案 0 :(得分:4)

您可以使用NSOperationQueueperformSelectorInBackground或Grand Central Dispatch(一旦您知道如何使用以后您经常使用它,因为它使线程非常容易)。主要的一点是不将它们加载到主线程上并一个接一个地加载它们(如果你试图一次性加载它们各自的线程性能可能不是很好其一)。加载完成后,调用主线程上的方法来分配结果。

例如:

yourQueue = dispatch_queue_create("plist load queue", NULL);

for (filename in plistFilesToLoad) {
    dispatch_async(yourQueue, ^{
        // This part will be executed in a thread,
        // each block after the other.
        NSDictionary *dict = [self loadPlist:filename];

        dispatch_async(dispatch_get_main_queue(), ^{
            // Assign the result on the main thread.
            [self finishedLoading:filename withDictionary:dict];
        });
    });
}

dispatch_async次呼叫快速返回,因此循环本身将快速执行。但是GCD将在一个单独的线程上一个接一个地执行每个块。