跟进我的问题here,我有22个plist文件,我想在发布时加载。现在,它有效,但你可以想象发射很慢。
我可以做些什么来最大限度地缩短发布时间?
我可以使用NSOperationQueue在单独的线程中加载每个吗?我还读到将plists转换为二进制文件会有所帮助。
答案 0 :(得分:4)
您可以使用NSOperationQueue
,performSelectorInBackground
或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将在一个单独的线程上一个接一个地执行每个块。