继续我的问题here,我有22个plist文件,我希望在启动时加载。现在,它可以工作,但你可以想象发射速度非常缓慢。在应用程序启动时将20多个plist文件加载到内存
我能做些什么来尽量减少发射时间?
我可以使用NSOperationQueue加载每个单独的线程吗?我也读过将plists转换为二进制文件将有所帮助。
继续我的问题here,我有22个plist文件,我希望在启动时加载。现在,它可以工作,但你可以想象发射速度非常缓慢。在应用程序启动时将20多个plist文件加载到内存
我能做些什么来尽量减少发射时间?
我可以使用NSOperationQueue加载每个单独的线程吗?我也读过将plists转换为二进制文件将有所帮助。
您可以使用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将会在一个单独的线程中一个接一个地执行每个块。
您也可以尝试使用'performSelectorInBackground:',因为它非常易于使用。 – gurooj
你确定你需要立即所有22 plists?如何试图加载他们懒惰? – Eimantas
是的, - 我确实需要他们。数据的响应速度是应用程序的关键。 – barfoon