Загрузка большого файла Plist - PullRequest
2 голосов
/ 01 октября 2011

У меня большой файл plist, у меня возникает проблема, когда я делаю:

 [NSMutableDictionary dictionaryWithContentsOfFile:docDirPath];

Я должен подождать несколько секунд, прежде чем смогу использовать приложение.Есть какое-то решение?

Спасибо

Ответы [ 2 ]

2 голосов
/ 01 октября 2011

Если список сохраняется как текстовый список, вместо этого преобразуйте его в двоичный список.Они загружаются намного быстрее.

Самый простой способ сделать это с помощью plutil:

plutil -convert binary1 file.plist

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

2 голосов
/ 01 октября 2011

Загрузите список в другой поток, GCD идеально подходит для этого.

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{ [self.theDictionary = [NSMutableDictionary dictionaryWithContentsOfFile:docDirPath];   });

Если класс метода, который делает это, не будет жить, пока чтение списка не будет завершено, вам нужно будет обернуть блокв копии в кучу.

dispatch_async(queue, [[^{ [self.theDictionary = [NSMutableDictionary dictionaryWithContentsOfFile:docDirPath]; } copy] autorelease]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...