Вы можете использовать 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 будет выполнять каждый блок один за другим в отдельном потоке.