Загрузка 20+ plist файлов в память при запуске приложения - PullRequest
0 голосов
/ 12 декабря 2011

В ответ на мой вопрос здесь у меня есть 22 plist-файла, которые я хотел бы загрузить во время запуска.Прямо сейчас, это работает, но, как вы можете себе представить, запуск очень медленный.

Что я могу сделать, чтобы наилучшим образом минимизировать время запуска?

Могу ли я загрузить каждый из них в отдельном потоке, используяNSOperationQueue?Я также читал, что преобразование списков в двоичный файл поможет.

1 Ответ

4 голосов
/ 12 декабря 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...